Swift3 NSLayoutConstraint激活/停用

Swift3 NSLayoutConstraint激活/停用,swift3,nslayoutconstraint,Swift3,Nslayoutconstraint,我只是尝试在textViewDidBeginEditing和textViewDidEndEditing中停用约束 我的NSLayoutConstraint是一个出口。textViewDidBeginEditing中的停用有效,但TextViewDiEndediting中的重新激活会发现约束为零 我已经用.isActive实例值和NSLayoutConstraint.activate/deactivate函数尝试了这一点 答案 我对瓦西里·赫里斯托夫的答案进行了反复研究,但没有成功,因为他只是简单

我只是尝试在textViewDidBeginEditing和textViewDidEndEditing中停用约束

我的NSLayoutConstraint是一个出口。textViewDidBeginEditing中的停用有效,但TextViewDiEndediting中的重新激活会发现约束为零

我已经用.isActive实例值和NSLayoutConstraint.activate/deactivate函数尝试了这一点

答案 我对瓦西里·赫里斯托夫的答案进行了反复研究,但没有成功,因为他只是简单地建议0和1000。从文件:

优先级不得从非必需更改为必需,或从必需更改为非必需。如果OS X中的
NSLayoutPriorityRequired
优先级或iOS中的
UILayoutPriorityRequired
更改为较低优先级,或者在将约束添加到视图后将较低优先级更改为所需优先级,将引发异常。即使在视图上安装了约束,也允许从一个可选优先级更改为另一个可选优先级

因此,我必须先将IB中的优先级更改为其他优先级(我选择750-高),然后在不需要时将其切换为250,并创建了第二个约束,该约束始终与第一个优先级为500(做其他事情)的约束相冲突,这使我获得了想要的行为


根据上面的文档,由于高不是必需的,我应该能够切换到0,但这仍然导致崩溃,所以我一定是读错了。因此,我为什么要做第二个约束。

您可以尝试更改约束的优先级。 例如:

constraint.priority = 0;    // it's turn off
constraint.priority = 1000; // it's turn on

>优先级不得从非必需更改为必需,或从必需更改为非必需。如果OS X中的
NSLayoutPriorityRequired
优先级或iOS中的
UILayoutPriorityRequired
更改为较低优先级,或者在将约束添加到视图后将较低优先级更改为所需优先级,将引发异常。即使在视图上安装了约束,也允许从一个可选优先级更改为另一个可选优先级。