1

我有一个 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. 视图将出现
  4. viewDidLayoutSubviews

但它变得不正确:

  1. viewDidLayoutSubviews
  2. viewDidAppear

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

4

2 回答 2

5

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

直到 viewDidAppear 之前的最终 viewDidLayoutSubviews 调用之后,AutoLayout 才完成。

于 2015-02-01T14:27:02.927 回答
2

我解决了我自己的问题。

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

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

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

于 2015-02-01T15:45:22.563 回答