我在 IB 中设置了多组约束,并且我想根据某些状态以编程方式在它们之间切换。有一个constraintsA
所有出口集合均标记为从 IB 安装,并且constraintsB
出口集合全部在IB中卸载。
我可以通过编程方式在两组之间切换,如下所示:
NSLayoutConstraint.deactivateConstraints(constraintsA)
NSLayoutConstraint.activateConstraints(constraintsB)
但是……我想不通when要做到这一点。看来我应该能够做到这一点viewDidLoad
,但我无法让它发挥作用。我试过打电话view.updateConstraints()
and view.layoutSubviews()
设置约束后,但无济于事。
我确实发现如果我设置约束viewDidLayoutSubviews
一切都按预期进行。我想我想知道两件事......
- 为什么我会出现这种行为?
- 是否可以从 viewDidLoad 激活/停用约束?
我激活和停用NSLayoutConstraints
in viewDidLoad
,我对此没有任何问题。所以它确实有效。你的应用程序和我的应用程序之间的设置一定有所不同:-)
我只会描述我的设置 - 也许它可以给你带来启发:
- 我设置了
@IBOutlets
对于我需要激活/停用的所有约束。
- In the
ViewController
,我将约束保存到不弱的类属性中。原因是我发现在停用约束后,我无法重新激活它 - 它为零。因此,停用后似乎会被删除。
- 我不使用
NSLayoutConstraint.deactivate/activate
像你一样,我用constraint.active = YES
/NO
反而。
- 设置约束后,我调用
view.layoutIfNeeded()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)