我有两个UI布局约束,它们在设计上相互冲突。一次只能有一个活跃。
在UIViewController's
方法updateConstraintsIfNeeded
中,我有以下代码在两个约束之间切换,具体取决于数据模型的状态。
override func updateConstraintsIfNeeded() {
super.updateConstraintsIfNeeded()
if question?.thumbURL != nil {
showAttachmentConstraint.active = true
hideAttachmentConstraint.active = false
} else {
showAttachmentConstraint.active = false
hideAttachmentConstraint.active = true
}
}
这项工作按预期进行,但我在调试输出中得到了这个熟悉的警告:
无法同时满足约束条件。可能至少下列列表中的一个约束是您不想要的约束。 ...
显然,当执行语句showAttachmentConstraint.active = true
时,它暂时与当时仍处于活动状态的hideAttachmentConstraint
冲突。
是否可以将此切换操作设为原子?我希望beginUpdate
中有endUpdate
和UITableView
之类的内容。
答案 0 :(得分:5)
您可以将其中一个冲突约束的优先级更改为999而不是1000.因此您在设计时甚至没有任何问题。
答案 1 :(得分:1)
始终首先停用某些约束,然后激活其他约束:
override func updateConstraintsIfNeeded() {
super.updateConstraintsIfNeeded()
if question?.thumbURL != nil {
hideAttachmentConstraint.active = false
showAttachmentConstraint.active = true
} else {
showAttachmentConstraint.active = false
hideAttachmentConstraint.active = true
}
}