在特定条件下切换约束
Posted
技术标签:
【中文标题】在特定条件下切换约束【英文标题】:Toggling a constraint under a certain condition 【发布时间】:2017-04-04 21:06:27 【问题描述】:设置:我设计了一个UIButton
,底部constraint
X,优先级999。除了这个constraint
之外,UIButton
还有另一个constraint
Y,优先级1000,但这个标记为@ 987654326@.
Y 与我的UIViewController
中的@IBOutlet
相关联,具有强引用。
在viewDidLoad()
上:如果给定条件恰好为真,我通过执行Y.isActive = true
激活constraint
Y,然后执行view.layoutIfNeeded()
,如果需要,它最终会调用updateConstraints()
。如果条件为假,我什么也不做。
我的期望:当条件为真时,我希望视图将 Y constraint
应用于按钮并删除 X。当条件为假时,我希望 UIButton
只有 constraint
X。
结果:似乎constraint
Y 根本没有被应用,即使满足条件。
我会很感激对此的任何想法,这对我来说似乎应该可行。
谢谢。
附:我使用 swift,但我不介意提供的答案是否在 Obj-C 中。
【问题讨论】:
如果两个约束之间的所有变化都是constant
,那么只需使用一个约束并进行更改。
尝试在viewDidLayoutSubviews
内部调用这个
viewDidLayoutSubviews 可能会起作用,因为它会覆盖约束发生的任何事情并在最后执行,但是,这似乎不是解决为什么这不起作用的解决方案。
【参考方案1】:
在使用 IB 时似乎存在一个错误,将约束的属性设置为已卸载并不总是会像“非活动”一样正常工作,而是稍后在激活/停用给定约束时会产生问题。
作为一种解决方法,始终将约束标记为已安装,但对于那些需要在加载时处于非活动状态的约束,请转到身份检查器/用户定义的运行时属性并将“活动”作为布尔值添加为 false(未选中)
在这里找到解决方案:https://***.com/a/33079428/691868
【讨论】:
以上是关于在特定条件下切换约束的主要内容,如果未能解决你的问题,请参考以下文章