NSLayoutConstraint 激活/停用
Posted
技术标签:
【中文标题】NSLayoutConstraint 激活/停用【英文标题】:NSLayoutConstraint activate/deactivate 【发布时间】:2017-07-22 00:41:15 【问题描述】:我只是想在 textViewDidBeginEditing 中停用约束并在 textViewDidEndEditing 中停用。
我的 NSLayoutConstraint 是一个出口。 textViewDidBeginEditing 中的停用有效,但随后 textViewDidEndEditing 上的重新激活发现约束为零。
我已经尝试使用 .isActive 实例值以及 NSLayoutConstraint.activate/deactivate 函数。
答案 我玩弄了 Vasil Hristov 的答案,但没有奏效,因为他只是建议 0 和 1000。来自文档:
优先级不能从非必需变为必需,或从必需变为非必需。如果将 OS X 中的
NSLayoutPriorityRequired
或 ios 中的UILayoutPriorityRequired
的优先级更改为较低的优先级,或者在将约束添加到视图后将较低的优先级更改为所需的优先级,则会引发异常。即使在视图上安装了约束之后,也允许从一个可选优先级更改为另一个可选优先级。
因此,我必须首先将 IB 中的优先级更改为其他内容(我选择了 750 - 高),然后在不需要时将其切换到 250,并创建了与第一个约束相冲突的第二个约束500 优先级(做其他事情),这让我得到了我想要的行为。
根据上面的文档,由于不需要高,我应该能够切换到 0,但这仍然导致崩溃,所以我一定是读错了。因此,我为什么要做第二个约束。
【问题讨论】:
【参考方案1】:您可以尝试更改约束的优先级。 例如:
constraint.priority = 0; // it's turn off
constraint.priority = 1000; // it's turn on
【讨论】:
> 优先级可能不会从非必需变为必需,或从必需变为非必需。如果 OS X 中的NSLayoutPriorityRequired
或 iOS 中的 UILayoutPriorityRequired
的优先级更改为较低的优先级,或者在将约束添加到视图后将较低的优先级更改为所需的优先级,则会引发异常。即使在视图上安装了约束之后,也允许从一个可选优先级更改为另一个可选优先级。以上是关于NSLayoutConstraint 激活/停用的主要内容,如果未能解决你的问题,请参考以下文章