How can I change constraints priority in run time How can I change constraints priority in run time ios ios

How can I change constraints priority in run time


As stated in NSLayoutConstraint class reference:

Priorities may not change from nonrequired to required, or from required to nonrequired. An exception will be thrown if a priority of NSLayoutPriorityRequired in OS X or UILayoutPriorityRequired in iOS is changed to a lower priority, or if a lower priority is changed to a required priority after the constraints is added to a view. Changing from one optional priority to another optional priority is allowed even after the constraint is installed on a view.

Use priority 999 instead of 1000. It won't be absolutely required technically speaking, but it'll be a higher priority than anything else.


I want to make a small addition to Cyrille's answer.

If you are creating constraint in code, make sure to set its priority before making it active. For instance:

surveyViewHeightConstraint = [NSLayoutConstraint constraintWithItem:self                                               attribute:NSLayoutAttributeHeight                                               relatedBy:NSLayoutRelationEqual                                                  toItem:self.superview                                               attribute:NSLayoutAttributeHeight                                              multiplier:1                                                constant:0];surveyViewHeightConstraint.active = YES;surveyViewHeightConstraint.priority = 999;

This would result in run-time exception.

Mutating a priority from required to not on an installed constraint (or vice-versa) is not supported.

Correct order is:

surveyViewHeightConstraint.priority = 999;surveyViewHeightConstraint.active = YES;

For Swift version 4+

constraintName.priority = UILayoutPriority(rawValue: 999)


Swift version:

myContraint.priority = UILayoutPriority(999.0)