ios - 在特定条件下切换约束

标签 ios swift uikit nslayoutconstraint

设置:我设计了一个UIButton,底部constraint X,优先级999。除了这个constraintUIButton 还有另一个 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(未选中)

在这里找到解决方案:https://stackoverflow.com/a/33079428/691868

关于ios - 在特定条件下切换约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43217705/

相关文章:

iphone - UIScrollView 在 iPhone/iPad 上旋转时禁用滚动

ios - 从线程中的视频 url 中提取缩略图

android - WebStorm + React-Native : Navigator is deprecated and has been removed from this package

ios - 增加旋转的 UIView 的宽度

iphone - 为什么当我执行 PerformSelectorInBackground :? 时没有自动释放池

ios - 在 iOS 的 Swift 中将 TabBarItem 标题字体更改为粗体

ios - 延迟后在后台线程中处理核心数据

ios - 如何在 Swift 中将数据从外部数据库填充到 UItableView

ios - 在 Swift 中设置呈现模态的自定义大小失败——占用全屏

ios - 以编程方式创建 plist 文件而不从我的主包中复制 plist