我有一个包含两个视图的视图,一个用于所有大小类(视图A),另一个仅用于常规常规(仅限iPad,视图B)。在我的视图控制器的loadView
中,我想浏览所有子视图并设置背景颜色。
override func loadView() {
super.loadView()
changeBackgroundColor(view)
}
func changeBackgroundColor(view: UIView) {
print(view)
view.backgroundColor = UIColor.red
view.subviews.forEach { self.changeBackgroundColor($0) }
}
这是一个人为的例子,但它说明了iOS视图层次结构和视图加载系统的更深层次问题。在loadView
期间在iPad上运行期间,即使特征集合按预期返回(使用常规常规设置),子视图数组中也不存在视图B 。此时存在的唯一子视图是视图A,尽管视图B仍然在运行时显示在屏幕上(背景颜色未更改)。
快进一点到viewWillLayoutSubviews
和中提琴! 两个视图现在都存在,因为它们应该位于子视图数组中。我能够验证在加载视图中子视图数组计数是1并且在viewWillLayoutSubviews
中它是2。
有没有人知道为什么iOS不会使用常规常规视图填充子视图阵列,直到执行布局之前?我无法在任何地方找到这种行为;如果其他人遇到类似的问题,我很好奇。