gpt4 book ai didi

ios - 如何在运行时更改标签约束?

转载 作者:IT王子 更新时间:2023-10-29 08:10:36 24 4
gpt4 key购买 nike

我有一个 TableView 和其中的一个单元格。该单元格包含三个标签:标题标签和两个标签,它们彼此相邻。有时,如果它们不包含数据,我需要将这两个标签隐藏在下面,并将“Header label”的“Top space to container”更改为“Center Y to container”。当然,当两个标签包含数据时,还要恢复约束。这是一个简单的演示项目的屏幕截图,只是为了展示这个想法:

enter image description here

更新 Max MacLeod 的回答指明了正确的方向。诀窍是在隐藏第一个和第二个标签时将标题标签向下推。因此,我们需要为第一个和第二个标签将底部空间设置为容器 View ,而不是为标题标签创建顶部空间到容器 View 。隐藏/取消隐藏应该通过设置高度导出(第一个和第二个标签的高度限制)并将它们的常量值设置为零(并在取消隐藏时设置回值)来完成。我还上传了 source code example to Github .

最佳答案

选择标题标签和下方标签之一,并添加反射(reflect)它们之间间隙的新垂直空间约束。接下来,删除标题标签 Top space to container 约束。也许您已经有了这个(从屏幕截图中看不出来)。如果你这样做了,那很好。

现在,为每个较低的标签创建两个高度约束。 IBOutlet 那些给你的类(class)。

然后,在需要时通过将每个高度约束的 constant 设置为 0.f 来隐藏这两个较低的标签。

这将使它们不可见并降低上方的标题标签,使其现在在容器中垂直居中 Y。

将再次执行这些步骤(评论太长了!)。顺序对于 IB 很重要,因为首先您必须添加一个新约束,然后才能删除旧约束。暂时你会有一个多余的约束。这是因为IB不允许歧义。因此,首先添加新的垂直空间约束。这将定义上部标签的 Y 位置。然后,从上部标签中删除容器约束的多余垂直空间。现在该标签将使用相对于下方标签的垂直空间进行 Y 定位。接下来,为每个较低的标签添加高度约束,并使用 IBOutlet 链接到该类。另一件事,实际上您需要将较低的标签限制在具有底部空间限制的容器中。当它们的高度减小到零时,它们将消失,并且上面的标签将向下移动以占据 Y 中心位置。

要还原,只需将常量设置回原始值即可。

这是比添加/删除约束更好的方法,后者是重量级操作。请注意,您可能希望将两个较低的标签添加到“容器” View ,以便它们可以作为一个显示/隐藏。此外,它会整理代码,因为您确实希望垂直空间位于上部标签和两个下部标签之间,而不仅仅是一个。

另见我的回答 AutoLayout with hidden UIViews?

关于ios - 如何在运行时更改标签约束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19707229/

24 4 0