选择标题标签和下方标签之一,并添加一个新的垂直空间约束,以反映它们之间的间隙。接下来,删除标题标签顶部空间到容器约束。也许你已经有了这个(从屏幕抓取中看不太清楚)。如果你这样做,那很好。
现在,为每个较低的标签创建两个高度约束。IBOutlet
那些给你的课。
constant
然后,通过将每个高度约束设置为,在需要时隐藏这两个较低的标签0.f
。
这将使它们不可见并降低上面的标题标签,以便它现在在容器中垂直居中 Y。
将再次完成这些步骤(评论太长了!)。顺序对 IB 很重要,因为首先您必须添加一个新约束,然后才能删除旧约束。暂时你会有一个多余的约束。这是因为 IB 不允许歧义。因此,首先添加新的垂直空间约束。这将定义上标签的 Y 位置。然后,从上部标签中删除多余的垂直空间到容器约束。现在该标签将使用相对于较低标签的垂直空间进行 Y 定位。接下来,为每个较低的标签添加高度约束,并使用 IBOutlet 链接到类。另一件事,实际上您需要将较低的标签约束到具有底部空间约束的容器。当它们的高度减少到零时,它们会消失,并且上面的标签将向下移动以占据 Y 中心位置。
要恢复,只需将constant
返回值设置为原始值。
这是一种比添加/删除约束更好的方法,这是一种重量级操作。请注意,您可能希望将两个较低的标签添加到“容器”视图中,以便它们可以显示/隐藏为一个。此外,它会整理代码,因为您确实希望垂直空间位于上标签和两个下标签之间,而不仅仅是一个标签。
另请参阅我的答案AutoLayout with hidden UIViews?