【发布时间】:2014-11-15 19:53:15
【问题描述】:
更新到 iOS 8 SDK 时,我的应用程序中的一个屏幕完全坏了。 问题似乎是顶部布局指南向上移动,而不是成为其余视图的“锚”。
这是在 iOS 7 上的视图:
这是它在 iOS 8 中的样子(从 Xcode 6 View Hierarchy 调试器中捕获):
如您所见,视图显示在导航栏上方。 顶部布局指南有两个约束,一个用于上部图像视图,一个用于其下方的白色视图。 底部布局指南没有限制,只有视图的高度限制。
由于某种原因,iOS 8 决定在第一次调用 [self.view layoutIfNeeded] 后将顶部布局指南推送到 {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中是正确的,因此请保存这些方法的框架/边界更新代码。 -
您是否提交了有关此问题的错误报告?
标签: ios iphone autolayout ios8