-2

我有两个标签。标签 A 和标签 B 如下图所示。

使用两个标签查看

Label A高度为0时查看

当标签 A 高度为零时,我想将标签 B 上边距向上移动到 superview = 20pt。

如果标签 A 高度 > 0 则标签 BY 位置 = 标签 A 顶部边距 + 标签 A 高度 + 标签 A 和 B 之间的垂直间距。(即标签 A 底部 + 垂直间距 b/w 标签 A 和 B = 标签 BY 位置) 是否可以使用自动布局来做到这一点?

4

1 回答 1

0

您可以将LabelA.height > 0案例的所有约束链接到NSLayoutConstraint IBOutletCollection

@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) *labelAScenarioConstraints;

LabelA.height = 0 场景也一样

@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) *labelAWithoutHeightScenarioConstraints

当你想改变它时,只需执行以下操作:

for (NSLayoutConstraint *constraint in labelAScenarioConstraints) {
    [constraint setActive:labelA.frame.size.height > 0];
}
for (NSLayoutConstraint *constraint in labelAWithoutHeightScenarioConstraints) {
    [constraint setActive:labelA.frame.size.height == 0];
}

您可以通过更改此属性来激活或停用约束...激活或停用约束调用 addConstraint: 和 removeConstraint: 在视图上,该视图是受此约束管理的项目的最近共同祖先。使用此属性而不是直接调用 addConstraint: 或 removeConstraint:。

请记住,所有 UI 更新都应该从主线程完成。如果要对约束更改进行动画处理,可以将代码放在UIView animateWithDuration动画块中。

于 2018-11-15T15:38:59.047 回答