Xcode 7.3中的UIStackView和UILabels

9
自从我更新到Xcode 7.3后,我在使用UIStackView时遇到了问题。如果我创建一个空项目,并将两个UILabel放入具有默认拉伸和压缩优先级的UIStackView中,则会显示出AutoLayout错位错误。即使只有一个UILabel在UIStackView中也不起作用!因此,优先级并不重要(我认为,也许这就是问题所在)。
我记得在Xcode 7.3之前一切都很好。我在两台MacBook Pro上分别进行了检查,出现了相同的问题。
有人知道如何解决吗?

enter image description here enter image description here


2
为什么这个被踩了?我觉得它非常有用且具体。 - nacho4d
3个回答

9

enter image description here 这是一个出现在Xcode 7.3中的bug,所以你可以像matt说的那样忽略它。

问题

当使用UIStackView时,Storyboard无法计算子视图的内在内容大小。

解决方法

如果你讨厌在Storyboard中看到警告,你可以按照以下步骤进行修复:

对于UIStackView的每个子视图,你应该执行以下步骤:

  • 点击子视图的警告
  • 选择“更新框架”选项
  • 在检查器视图中的第四个菜单中选择子视图内在大小的“占位符”

这样你就不会看到警告了,并且你可以看到是否存在任何歧义。

缺点是每次更改子视图(例如:更改UILabel的文本大小)时都需要执行这些步骤。

希望苹果在下一个版本中修复这个bug。


嗨,Hamza。谢谢你的截图!它非常好用!太棒了! - Ralf Hundewadt
嘿,@RalfHundewadt,欢迎你,谢谢你的反馈 :) - HamzaGhazouani

4
忽略这些警告。故事板从来没有完全理解堆栈视图。约束在运行时将是正确的,这才是最重要的。

是的,在运行时它可以工作,但在Interface Builder中也一直工作到7.3版本。苹果公司知道这个问题吗?他们有计划修复它吗?:( - Evgeny
你有Bug编号吗?这样我也可以报告它作为重复项 :) - nacho4d
@matt,我怎样才能确保约束在运行时是正确的?有没有一种方法可以在运行时检查歧义性? - nacho4d

3

我有一个不同的技巧,可以消除警告并使"更新帧"正常工作。

优点:

不需要每次更改文本时更改占位符值

缺点:

在Xcode 8推出后,会出现不必要的额外视图

步骤:

  • 将每个UILabel嵌入到一个UIView中。
  • 对UIView进行约束以根据标签自动调整大小(匹配前导、尾随、底部和顶部)

似乎UIStackView(在Xcode 7中)无法理解标签的内在内容大小,但是可以理解视图的内在内容大小 - 因此将标签放入视图中,就大功告成了!

输入图片说明


即使在当前版本的Xcode 8(Beta 6)中,有时仍然需要这样做。已提交错误报告。 - florianbuerger

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