我有一个UIViewController,我通过IB使用Autolayout来定位和调整其子视图。
出于某种原因,我没有得到正确的UIView布局,我决定在VC中记录所有子视图大小。
我记录了以下的子视图尺寸:
viewDidLoad{
self.view.layoutIfNeeded()
print(uiview.size)
}
viewDidLayoutSubviews{
print(uiview.size)
}
viewWillAppear{
print(uiview.size)
}
viewDidAppear{
print(uiview.size)
}
子视图尺寸正确无误:
但在以下情况下变得不正确:
如何使用ViewWillAppear中正确的子视图大小?为什么在最终的viewDidLayoutSubviews调用和viewDidAppear中我的尺寸不正确?
答案 0 :(得分:5)
您的“正确尺寸”来自AutoLayout完成其工作之前。框架将是Interface Builder文档中的框架。您需要修复约束以实现您期望的任何帧。
直到最后一次viewDidLayoutSubviews在viewDidAppear之前调用之后,AutoLayout才完成。
答案 1 :(得分:2)
我解决了自己的问题。
我限制了与VC高度成比例的视图。
我正在显示的VC有一个导航栏。所有视图大小都是正确的(甚至在viewDidLoad中,因为我调用layoutIfNeeded()),直到VC开始绘制导航栏并缩小Superview的高度;因此,缩小了子视图的高度。
我所要做的就是通过勾选VC的属性检查器中的相应框来扩展顶栏下的边缘。这样VC就不会缩小我的子视图的超级视图。