我有两个标签。标签 A 和标签 B 如下图所示。
当标签 A 高度为零时,我想将标签 B 上边距向上移动到 superview = 20pt。
如果标签 A 高度 > 0 则标签 BY 位置 = 标签 A 顶部边距 + 标签 A 高度 + 标签 A 和 B 之间的垂直间距。(即标签 A 底部 + 垂直间距 b/w 标签 A 和 B = 标签 BY 位置) 是否可以使用自动布局来做到这一点?
我有两个标签。标签 A 和标签 B 如下图所示。
当标签 A 高度为零时,我想将标签 B 上边距向上移动到 superview = 20pt。
如果标签 A 高度 > 0 则标签 BY 位置 = 标签 A 顶部边距 + 标签 A 高度 + 标签 A 和 B 之间的垂直间距。(即标签 A 底部 + 垂直间距 b/w 标签 A 和 B = 标签 BY 位置) 是否可以使用自动布局来做到这一点?
您可以将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动画块中。