自从我更新到Xcode 7.3后,我在使用UIStackView时遇到了问题。如果我创建一个空项目,并将两个UILabel放入具有默认拉伸和压缩优先级的UIStackView中,则会显示出AutoLayout错位错误。即使只有一个UILabel在UIStackView中也不起作用!因此,优先级并不重要(我认为,也许这就是问题所在)。我记得在Xcode 7.3之前一切都很好。我在两台MacBook Pro上分别进行了检查,出现了相同的问题。有人知道如何解决吗?
这是一个出现在Xcode 7.3中的bug,所以你可以像matt说的那样忽略它。 问题 当使用UIStackView时,Storyboard无法计算子视图的内在内容大小。 解决方法 如果你讨厌在Storyboard中看到警告,你可以按照以下步骤进行修复: 对于UIStackView的每个子视图,你应该执行以下步骤: 点击子视图的警告 选择“更新框架”选项 在检查器视图中的第四个菜单中选择子视图内在大小的“占位符” 这样你就不会看到警告了,并且你可以看到是否存在任何歧义。 缺点是每次更改子视图(例如:更改UILabel的文本大小)时都需要执行这些步骤。 希望苹果在下一个版本中修复这个bug。
我有一个不同的技巧,可以消除警告并使"更新帧"正常工作。 优点: 不需要每次更改文本时更改占位符值 缺点: 在Xcode 8推出后,会出现不必要的额外视图 步骤: 将每个UILabel嵌入到一个UIView中。 对UIView进行约束以根据标签自动调整大小(匹配前导、尾随、底部和顶部) 似乎UIStackView(在Xcode 7中)无法理解标签的内在内容大小,但是可以理解视图的内在内容大小 - 因此将标签放入视图中,就大功告成了!