问题在于,当其中一个标签为空时,在空白标签上方和下方的其他两个标签之间会有额外的空间(30像素)。
我知道一个解决方案是将所有文本标签限制在顶部和上面的标签然后我可以删除它,一切看起来都应该对齐但问题是我重复使用视图,有时候所有的标签有文字,有时一些是空的。因此,如果我删除标签,我将不得不重新创建它并手动重新调整约束。
当其中一个标签为空而没有删除时,有没有办法删除额外的垂直间距?
修改1:标签没有任何高度约束,因此空标签将为0像素高
编辑2:我需要支持iOS7 +
答案 0 :(得分:2)
可能的选择:
不要使用多个标签,只能使用一个,如果您需要不同部分的不同格式,可能会使用属性字符串
为每个约束添加一个出口,并根据带有文本的标签调整常量
还有很多其他的,包括使用表格视图,堆栈视图(iOS 9+),可能还有更多......
答案 1 :(得分:0)
如果你可以支持iOS 9及更高版本,那么你可以使用堆栈视图并在堆栈视图中设置标签的约束。但是,不应清空标签,而应隐藏标签。当标签被隐藏时,堆栈视图会自动显示其下方的所有标签。您应该使用此方法获得所需的行为。
答案 2 :(得分:0)
我的经验法则是,如果布局在Interface Builder中变得过于复杂,那么最好只编写代码来完成它。在这种情况下,我甚至不确定是否可以在IB中定义。但即使是这样,我也会用代码来做。它不是一个复杂的布局,它将更加可重用,代码更清晰。
一些选择:
A - 你可以修改viewWillLayoutSubviews中的约束 - 坚持这么多顶级约束有点麻烦。如果将它们全部添加到插座集合(基本上是插座阵列),那就不那么麻烦了。
B - 您可以手动调整viewDidLayoutSubviews中的帧 - 虽然它会引发问题,但如果你手动完成几乎所有的工作,为什么还要使用AutoLayout。
C - 使用SnapKit并在viewDidLoad中生成这些约束和/或在文本更改时更新它们。我强烈推荐SnapKit。可以将其视为以编程方式创建AutoLayout约束的理智方式。它非常干净,非常简单。