我的应用程序中的一个屏幕在更新到iOS 8 SDK时完全崩溃了。问题似乎是顶部布局指南向上移动,而不是成为其他视图的“锚点”。
以下是iOS 7中视图的外观:[图片]
以下是iOS 8中的外观(从Xcode 6 View Hierarchy调试器中捕获):[图片]
如您所见,该视图出现在导航栏上方很多。 关于顶部布局指南有两个约束条件,一个是上方图像视图,另一个是下面的白色视图。 底部布局指南没有约束条件,只有视图高度的约束条件。
由于某种原因,在第一次调用[self.view layoutIfNeeded]之后,iOS 8决定将顶部布局指南推到{0-255;0 0}。 此外,视图的边界有时出现过大的情况,即以统一的故事板尺寸(600x600),而不是320x480 / 320x568显示。
iOS 8有哪些更改可能会损坏布局?
[编辑] 这里是视图上的所有约束条件的完整列表:
以下是iOS 7中视图的外观:[图片]
以下是iOS 8中的外观(从Xcode 6 View Hierarchy调试器中捕获):[图片]
如您所见,该视图出现在导航栏上方很多。 关于顶部布局指南有两个约束条件,一个是上方图像视图,另一个是下面的白色视图。 底部布局指南没有约束条件,只有视图高度的约束条件。
由于某种原因,在第一次调用[self.view layoutIfNeeded]之后,iOS 8决定将顶部布局指南推到{0-255;0 0}。 此外,视图的边界有时出现过大的情况,即以统一的故事板尺寸(600x600),而不是320x480 / 320x568显示。
iOS 8有哪些更改可能会损坏布局?
[编辑] 这里是视图上的所有约束条件的完整列表:
(lldb) po self.view.constraints
<__NSArrayM 0x786ac520>(
<NSLayoutConstraint:0x7c377bd0 V:[_UILayoutGuide:0x7c372f60]-(0)-[UIView:0x7c373120]>,
<NSLayoutConstraint:0x7c377c00 UIView:0x7c373120.width == UIView:0x7c3730b0.width>,
<NSLayoutConstraint:0x7c377c30 UIView:0x7c3730b0.centerX == UIView:0x7c373120.centerX>,
<NSLayoutConstraint:0x7c377c60 H:|-(0)-[UIView:0x7c3716f0] (Names: '|':UIView:0x7c3730b0 )>,
<NSLayoutConstraint:0x7c377c90 UIView:0x7c3716f0.width == UIView:0x7c3730b0.width>,
<NSLayoutConstraint:0x7c372f30 V:[_UILayoutGuide:0x7c372f60]-(129)-[UIView:0x7c3716f0]>
)
viewDidLoad
中,边界仍将是故事板大小(通常为 600x600)。视图的边界将在viewWillAppear
和viewDidAppear
中正确显示,因此请将您的框架/边界更新代码保存到这些方法中。 - keithbhunter