在特定条件下切换约束

Toggling a constraint under a certain condition

设置:我设计了一个UIButton,底部是constraint X,优先级999。除了这个constraintUIButton还有另一个constraint Y,优先级 1000 但这个被标记为 installed = false.

Y 链接到我的 UIViewController 中的一个 @IBOutlet,具有很强的参考意义。

On viewDidLoad():如果给定条件恰好为真,我通过执行 Y.isActive = true 激活 constraint Y,然后执行 view.layoutIfNeeded(),最终调用 updateConstraints() 如果需要的话。如果条件为假,我什么也不做。

我的期望:当条件为真时,我希望视图将 Y constraint 应用于按钮并放下 X。当条件为假时,我希望 UIButton 仅有 constraint X.

结果:似乎 constraint Y 根本没有被应用,即使满足条件也是如此。

如果对此有任何想法,我将不胜感激,这对我来说似乎应该可行。

谢谢。

P.S。我使用 swift,但我不介意提供的答案是否在 Obj-C 中。

使用 IB 时似乎存在一个错误,将约束的 属性 设置为已卸载并不总是像 'inactive' 那样正常工作,而是稍后会在 activating/deactivating给定的约束。

作为解决方法,始终将约束标记为已安装,但对于那些需要在加载时处于非活动状态的约束,转到身份检查器/用户定义的运行时属性并将 'active' 作为布尔集添加到错误(未选中)

在此处找到解决方案: