Xcode 7.3 中带有 UILabel 的 UIStackView

UIStackView with UILabels in Xcode 7.3

自从我更新到 Xcode 7.3 后,我遇到了 UIStackView 的问题。如果我创建一个空项目并仅将两个 UILabel 放入 UIStackView 中,并使用默认的紧贴和压缩优先级,它会显示 AutoLayout 错位错误。它甚至不适用于 UIStackView 中的一个 (!) UILabel,因此优先级无关紧要(正如我认为的那样,可能存在问题)。

我记得在 Xcode 7.3 之前一切都很好。我分别检查了两台MacBook Pro,都是同样的问题。

有人知道怎么解决吗?

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

这是Xcode 7.3出现的bug,大家可以无视他说的matt.

问题

使用 UIStackView 时故事板无法计算子视图的固有内容大小

解决方案

如果您不喜欢在情节提要中看到警告,您可以像下面这样修复它:

您应该为 UIStackView

的每个子视图执行这些步骤
  • 点击子视图的警告
  • 点击 "Update frames" 选项
  • 在第四个菜单中选择"Placeholder"子视图的固有大小 检查员视图

这样你就不会看到警告了,你可以看看是否有歧义存在

缺点是每次更改子视图时都应执行此步骤(例如:更改 UILabel 的文本大小)

希望 Apple 在下一个版本中修复此错误

我有一个不同的技巧来消除警告并使 'update frames' 正常工作。

优点:

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

缺点:

当 Xcode 8 出来时不必要的额外视图

步骤:

  • 将每个 UILabel 嵌入到 UIView 中。
  • 限制 UIView 根据标签调整自身大小(匹配前导、尾随、底部和顶部)

似乎 UIStackView(在 Xcode 7 中)无法理解标签的内在内容大小,但可以理解视图的内在内容大小 - 所以将标签放在视图中并转瞬即逝!