在特定条件下切换约束
Toggling a constraint under a certain condition
设置:我设计了一个UIButton
,底部是constraint
X,优先级999。除了这个constraint
,UIButton
还有另一个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' 作为布尔集添加到错误(未选中)
在此处找到解决方案:
设置:我设计了一个UIButton
,底部是constraint
X,优先级999。除了这个constraint
,UIButton
还有另一个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' 作为布尔集添加到错误(未选中)
在此处找到解决方案: