【发布时间】:2015-06-02 14:47:52
【问题描述】:
我的 iPhone 应用程序中的视图有一个非常奇怪的问题。
我有两个UIViewController 子类A 和B。
类B 的UIViewController(我们称之为b)从UIViewController 的UIViewController 内部的方法调用(a)。
但是当显示b 时,b 的“根”视图的框架和边界在viewDidLoad 和viewWillAppear 的调用之间发生了神奇的变化。
我不知道,为什么会这样。据我所知,我所有的其他观点都没有这个问题。
这些是框架和边界:
在viewDidLoad:
self.view.frame: {0, 0}, {375, 667}
self.view.bounds: {0, 0}, {375, 667}
在viewWillAppear::
self.view.frame: {0, 64}, {375, 554}
self.view.bounds: {0, 0}, {375, 554}
我做了一个截图来演示这个问题。
黄色区域是b 的self.view。红色和绿色的是self.view 的子视图。他们只是为了我的布局。我认为它们对 self.view 框架或边界没有任何影响。
有谁知道是什么导致了这个问题?
【问题讨论】:
-
没有问题。
viewDidLoad中的视图框架尚未最终确定。这很正常。不要依赖它。 -
您必须在
viewWillAppear或更高版本中完成所有与视图位置相关的代码。viewDidLoad仅表示视图已加载,但视图尚未处于最终位置。 -
好的,但是为什么在其他视图控制器中不会发生这种情况呢?或者这只是一个巧合,它适用于其他人?
-
@RoryMcKinnel 很可能在
viewDidLoad中完成所有与视图位置相关的代码。我一直都这样做。但这需要正确设置框架和子视图的autoreszingMask。 -
@rmaddy 是的。应该是“你更安全”而不是“你必须”。正如你所说,如果你把所有东西都锁定了就可以了。
标签: ios objective-c uiview uiviewcontroller viewwillappear