设置:我设计了一个UIButton
,底部constraint
X,优先级999。除了这个constraint
,UIButton
还有另一个 constraint
Y,优先级 1000,但这个被标记为 installed = false
。
Y 被链接到我的 UIViewController
中的一个 @IBOutlet
,并带有一个强引用。
在 viewDidLoad()
上:如果给定条件恰好为真,我通过执行 Y.isActive = true
激活 constraint
Y,然后是 view.layoutIfNeeded()
,如果需要,它最终会调用 updateConstraints()
。如果条件为假,我什么都不做。
我的期望:当条件为真时,我希望 View 将 Y constraint
应用于按钮并放下 X。当条件为假时,我希望 UIButton
只有 constraint
X.
结果:似乎 constraint
Y 根本没有被应用,即使满足条件也是如此。
如果有任何想法,我将不胜感激,这对我来说似乎是可行的。
谢谢。
附言我使用 swift,但我不介意提供的答案是否在 Obj-C 中。
最佳答案
使用 IB 时似乎存在一个错误,其中将约束的属性设置为已卸载并不总是作为“非事件”正常工作,而是稍后在激活/停用给定约束时会产生问题。
作为解决方法,始终将约束标记为已安装,但对于那些需要在加载时处于非事件状态的约束,转到身份检查器/用户定义的运行时属性并将“事件”作为 bool 值添加为 false(未选中)
关于ios - 在特定条件下切换约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43217705/