激活和取消激活约束而不更新视图框架

时间:2018-07-09 20:06:12

标签: ios swift storyboard nslayoutconstraint

我有一个包含Label和Button的子视图,但是并不总是需要该按钮。如果需要按钮,则标签需要显示在视图的顶部,按钮应显示在视图的底部。如果不需要按钮,则标签需要显示在视图的中间。

为此,我修改了三个约束:

  1. 标签底部到按钮顶部的标签等于0。(约束1)
  2. 标签底部到按钮顶部的标签大于或等于0(Constraint3)
  3. 按钮高度(Constraint3)

注意:Label的顶部约束条件为0,而Button的底部约束条件为0。

注意:所有约束均已设置为安装,并且在构建时按钮高度为42

如果需要该按钮,则Constraint1将被卸载,而Constraint3将被设置为42。

enter image description here

如果不需要按钮,则将Constraint1安装并且Constraint3设置为0。

enter image description here

如您所见,这可以按预期在情节提要上起作用。但是,在代码中,行为没有得到体现。如果需要该按钮,请尝试以下操作:

constraint3.constant = 42
self.view.removeConstraint(constraint1)
self.view.updateConstraints

但是,除了预期的结果,我得到的结果似乎是从未删除约束:

enter image description here

我在情节提要中卸载了约束,它看起来是正确的,但是当我在代码中卸载了约束时,它没有...为了使它正常工作,我的代码有什么不正确/遗漏了?

1 个答案:

答案 0 :(得分:0)

更改此

self.view.removeConstraint(constraint1)

parentView.removeConstraint(constraint1)
self.view.layoutIfNeeded()

此约束需要从标签和包含该约束的按钮的父视图中删除