激活和停用约束不更新视图框架

Activating and Deactivating Constraints Not Updating View Frame

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

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

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

注意:Label 有一个顶部约束,视图设置为 0,Button 有一个底部约束,视图设置为 0。这些保持不变。

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

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

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

如您所见,这在故事板上按预期工作。但是,在代码中,不会反映该行为。如果需要按钮,我试试这个:

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

但是我得到的结果不是预期的结果,就好像约束从未被删除过一样:

我卸载故事板中的约束,它看起来是正确的,但是当我卸载代码中的约束时,它并没有...我的代码中的 incorrect/missing 是什么使它正常工作?

改变这个

self.view.removeConstraint(constraint1)

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

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