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