自Xcode 8以来,Interface Builder的布局约束问题

14
自从我将我的 Swift 项目升级到 Swift 2.3 和 Xcode 8(正式版)之后,我无法完成我的界面设计:

enter image description here

我正在完美地设置所有的限制条件,一切都正常。第二天我重新打开Xcode,发现我的所有视图都变成了这样。
此外,我收到了大量警告信息:

enter image description here

如果我点击 更新框架,警告框就会消失,视图再次变为正常状态。但是只要我重新启动Xcode(或有时甚至只是构建项目)它又会恢复到之前的状态...

enter image description here

重要提示: 所有视图在任何设备上看起来都非常完美,但是很难保持概览。

我花了整整一个晚上替换当前项目的所有元素。一切都没有问题,没有任何警告。第二天,警告又回来了,而我什么都没有改变。我该怎么解决这个问题?非常感谢您的帮助。

enter image description here

我可以“更新框架”,一切看起来都很好。但经过几次构建或最迟重新打开Xcode后,它又会变成这样。
最新的例子:极简单的屏幕。UIViewController。UINavigationBar。UITableView。没有segues。一个Prototype Cell。

enter image description here

昨晚完美设置了所有约束。 重新打开Xcode。 发现这个问题。

编辑:

将所需控制器的模拟大小切换为自由格式并在检查器中更新框架,这是一个临时解决方案。

只要我重新打开Xcode,所有警告都会再次出现。 我可以将值更改为fixed,然后所有元素都会“弹回”到其所需位置,并且警告会消失 -> 重新打开Xcode,所有警告都会重新出现,控制器的元素又会乱起来。

enter image description here

同时,将故事板文件类型更改为7.x的建议也没有任何效果。我按下了7.x,它问我是否想要更改。我按下了“确定”。加载完毕后,我打开了main.storyboard,然后它问我要在哪个设备上打开故事板。然后重新选择了Xcode 8.0。

enter image description here


每次重新启动Xcode后都会发生这种情况吗? - ArtStyle
有时即使没有重启,这种情况也会发生。继续编码...继续运行应用程序。几分钟或几小时后转到Storyboard,所有警告都会重新出现。 - David Seek
但是,是的。重新启动可以保证警告信息会再次出现。 - David Seek
有时候仅仅进行一次构建就足够了。 - David Seek
我在我的项目中使用了视图容器,是的。但是在没有视图容器的视图上,我也遇到了这个问题。 - David Seek
显示剩余5条评论
2个回答

4

快速解决方法:在检查器中将所需控制器的模拟大小更改为自由形式,然后更新框架。看起来自由形式控制器不受这些新的Xcode 8 IB功能的影响 :)


那个功能是用来做什么的? - David Seek
好的,你的修复方法对我不起作用。我改成自由格式后,所有警告都消失了。我关闭并重新打开Xcode,所有警告又回来了。如果我再次切换到“固定”模式,警告就会再次消失,但重新打开Xcode后,警告又会出现。 - David Seek
@DavidSeek 你试过将IB文件类型更改为7.x吗? - Vlad Fedoseev
新版Xcode肯定存在一个错误……希望他们能在下一个版本中修复它。 - Vlad Fedoseev
回滚到之前的Xcode版本,请访问以下链接:http://adcdownload.apple.com/Developer_Tools/Xcode_7.3.1/Xcode_7.3.1.dmg - Vlad Fedoseev
显示剩余7条评论

3
我正在处理一个包含多个storyboard和大量viewcontroller的大型项目,其中大部分都出现了同样的问题。由于Xcode现在支持带有小数值的约束条件,所以我想这可能是问题的原因。
以下方法可解决所有UITableView和UICollectionView中的问题:
1) 从单元格内的任何一个视图中删除一个"高度等于:xx"约束条件。
2) 更新所有框架。
3) 选择您刚刚移除约束条件的那个视图。
4) 单击添加新约束条件按钮。现在它应该显示一个新的高度,可能带有小数值。
5) 添加高度约束条件而不更改框中的任何值。
这样就可以解决单元格的问题了。对于所有出现问题的单元格,请重复这些步骤。希望这个解决方案也适用于您。祝好运!

今天稍后我会尝试。希望它能够正常工作,但我有一种好感觉,如果它对你有效的话。 - David Seek
但我会继续尝试您的建议,在两个小时内我就能再次点赞。您至少会因为您的努力得到我的点赞! - David Seek
@DavidSeek 如果你能与我分享一个简单的故事板示例,其中有相同的问题,我可以尝试帮助你解决它。 - enoktate
我会尝试创建一个或尝试导出我的! - David Seek
哇,这是一个很大的故事板,为了可用性,我建议您将此故事板拆分为多个故事板,相信我,您将来会更加快乐。
当我们回到您的问题时,由于我没有太多时间,我只修复了2个单元格,但修复方法对所有其他单元格都适用。 我使用我的原始答案中的步骤进行修复。 例如;
在您的“用户推文表视图场景”中的“djProfile单元格”中,
1)删除“Bg View”的高度约束
2)更新所有框架
3)选择“Bg View”,添加约束并添加高度常量。 使用框中的值。
- enoktate
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接