是否可以在 Interface Builder 中使用自动布局定位视图,以便如果标签为空,其他视图将不会保留 space?

Is it possible to position views with Auto Layout in Interface Builder so that if a label is empty the other views will not keep the space?

我有一个 UIView 我想在 Interface Builder 中使用自动布局进行定位,该视图由多个标签组成。这是一个尝试的文本表示:

            |
-- First label with some text -------------------
            |
-- Second label that may not have text in it ----
            |
-- Third label with some text -------------------
            |

基本上,三个标签之间的距离约为 20pt,距离边缘的距离约为 20pt。

然而——更重要的是——第二个标签通常根本没有文字。它在某种程度上是视图可能具有的可选额外描述。

是否可以按照 "Position like above, but if the second label isn't present, put that 20pt spacing in between the first and third label." 的思路说点什么。我想确保当第二个标签为空时没有奇怪的间隙。

您需要从超级视图中删除第二个标签,以使其约束消失。如果没有第二个标签,您可以在第三个和第一个标签之间添加一个较低优先级的约束,为它们提供您想要的间距。在代码中,您将需要检查第二个 able 是否没有文本,如果是,则将其从其父视图中删除。这将导致满足较低优先级的约束,并将第三个标签向上移动。

编辑后:

另一种不删除任何内容的方法是首先在第三个和第一个标签之间设置垂直间距约束,而不是在第三个和第二个标签之间设置垂直间距约束。为该约束创建一个 IBOutlet,如果第二个标签没有文本,则在代码中更改其常量值。第二个标签仍然存在,但第三个标签会在上面。