在Xcode 7.3中使用UILabels的UIStackView

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

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

有人知道如何解决它吗?

在此处输入图像描述 在此处输入图像描述

在此处输入图像描述 这是Xcode 7.3中出现的一个错误,因此您可以将其视为他所说的无光泽。

问题

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

如果你讨厌在故事板中看到警告,你可以修改它,如下所示:

您应该为UIStackView每个子视图执行这些步骤

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

就像那样你不会看到警告,你可以看到是否存在任何歧义

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

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

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

我有一个不同的技巧来消除警告并使“更新帧”正常工作。

优点:

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

坏处:

Xcode 8出现时不需要的额外视图

脚步:

  • 将每个UILabel嵌入UIView中。
  • 根据标签约束UIView的大小(匹配前导,尾随,底部和顶部)

看起来UIStackView(在Xcode 7中)无法理解标签的内在内容大小,但是CAN可以理解视图的内在内容大小 – 所以将标签放在视图中并预先设置!

在此处输入图像描述