使用情节提要时,为什么不viewWillAppear
绘制我的子视图,viewDidLayoutSubviews
并且更重要的是要访问frame.size
我必须在其中调用的子视图的子视图中[self.scroller layoutIfNeeded]
的值viewDidLayoutSubviews
?我有兴趣了解视图控制器的页面生命周期以及从 xibs 到故事板的变化。
问问题
1643 次
1 回答
2
故事板实际上是作为 xib 文件的集合实现的,其中包含有关它们之间的转换(segues)的附加信息。因此,如果我们只是在谈论单个视图控制器,那么视图控制器的生命周期应该不会有根本的不同。
如果不了解您的视图控制器及其视图层次结构是如何设置的,就很难回答您的具体问题。听起来您在滚动视图中有一个视图,并且您想知道何时可以访问其frame
属性。
UIKit 遵循以下步骤(大致):
- 它加载 storyboard/xib 文件中描述的所有视图,并根据需要连接所有动作和出口。
viewDidLoad
在这一步之后调用。 - 它调用
viewWillAppear:
以指示它即将显示视图。 - 它将视图添加到窗口,调整大小以适合。尺寸调整会沿视图层次结构传播,因此每个视图都会布置其子视图(如果将其配置为自动调整子视图大小)。这些更改发生在动画块内,因此一旦设置好所有内容,用户就会看到新视图动画到位。
- 一旦动画完成,
viewDidAppear:
就会被调用。
如果视图autoresizesSubviews
设置为NO
;你可能会看到一些奇怪的东西 这可能就是你必须打电话layoutIfNeeded
的原因self.scroller
。请注意,文档layoutIfNeeded
说:
收到此消息后,将遍历该层的超层,直到找到不需要布局的祖先层。然后在该祖先下的整个层树上执行布局。
所以它可能会触发其他不相关视图的布局。
于 2013-01-11T20:44:01.760 回答