使用故事板时,为什么 viewWillAppear
不能绘制我的子视图,而 viewDidLayoutSubviews
更有效,更重要的是访问 {{ 1}} 子视图的值我必须在 frame.size
中调用 [self.scroller layoutIfNeeded]
?我有兴趣了解视图控制器的页面生命周期以及从xibs到故事板的变化。
答案 0 :(得分:2)
故事板实际上是作为xib文件的集合实现的,其中包含有关它们之间转换(segue)的其他信息。因此,如果我们只讨论单个视图控制器,那么视图控制器的生命周期不应完全不同。
如果不了解视图控制器及其视图层次结构的设置方式,则很难回答您的具体问题。听起来您在滚动视图中有一个视图,并且您想知道何时可以访问其frame
属性。
UIKit遵循以下步骤(粗略地):
viewDidLoad
。viewWillAppear:
表示它即将显示视图。viewDidAppear:
。如果视图autoresizesSubviews
设置为NO
,您可能会看到一些奇怪的内容;这可能是您必须在layoutIfNeeded
上致电self.scroller
的原因。请注意,layoutIfNeeded
的文档说:
当收到此消息时,将遍历图层的超级图层,直到找到不需要布局的祖先图层。然后在该祖先下面的整个图层树上执行布局。
因此它可能会触发其他无关视图的布局。