Autolayout:ViewDidAppear中的帧大小不正确

时间:2015-02-01 09:36:30

标签: swift ios8 xcode6 autolayout ios-autolayout

我有一个UIViewController,我通过IB使用Autolayout来定位和调整其子视图。

出于某种原因,我没有得到正确的UIView布局,我决定在VC中记录所有子视图大小。

我记录了以下的子视图尺寸:

viewDidLoad{
   self.view.layoutIfNeeded()
   print(uiview.size)
}

viewDidLayoutSubviews{
 print(uiview.size)
}
viewWillAppear{
 print(uiview.size)

}
viewDidAppear{
 print(uiview.size)
}

子视图尺寸正确无误:

  1. viewDidLoad中
  2. viewDidLayoutSubviews
  3. viewWillAppear中
  4. viewDidLayoutSubviews
  5. 但在以下情况下变得不正确:

    1. viewDidLayoutSubviews
    2. viewDidAppear
    3. 如何使用ViewWillAppear中正确的子视图大小?为什么在最终的viewDidLayoutSubviews调用和viewDidAppear中我的尺寸不正确?

2 个答案:

答案 0 :(得分:5)

您的“正确尺寸”来自AutoLayout完成其工作之前。框架将是Interface Builder文档中的框架。您需要修复约束以实现您期望的任何帧。

直到最后一次viewDidLayoutSubviews在viewDidAppear之前调用之后,AutoLayout才完成。

答案 1 :(得分:2)

我解决了自己的问题。

我限制了与VC高度成比例的视图。

我正在显示的VC有一个导航栏。所有视图大小都是正确的(甚至在viewDidLoad中,因为我调用layoutIfNeeded()),直到VC开始绘制导航栏并缩小Superview的高度;因此,缩小了子视图的高度。

我所要做的就是通过勾选VC的属性检查器中的相应框来扩展顶栏下的边缘。这样VC就不会缩小我的子视图的超级视图。