Według NSLayoutConstraints class
środka UIKit Module
Jeśli poziom priorytetu ograniczenia jest mniejszy niż UILayoutPriorityRequired, jest opcjonalny. Ograniczenia o wyższym priorytecie są spełnione przed ograniczeniami o niższym priorytecie. Zadowolenie z ograniczeń to nie wszystko albo nic. Jeśli ograniczenie „a == b” jest opcjonalne, oznacza to, że spróbujemy zminimalizować „abs (ab)”. Ta właściwość może być modyfikowana tylko w ramach początkowej konfiguracji lub gdy jest opcjonalna. Po dodaniu ograniczenia do widoku zostanie zgłoszony wyjątek, jeśli priorytet zostanie zmieniony z / na NSLayoutPriorityRequired.
Przykład: - UIButton
ograniczenia o różnych priorytetach -
func setConstraints() {
buttonMessage.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint(item: buttonMessage, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1.0, constant: -10).isActive = true
let leading = NSLayoutConstraint(item: buttonMessage, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1.0, constant: 10)
leading.isActive = true
let widthConstraint = NSLayoutConstraint(item: buttonMessage, attribute: NSLayoutAttribute.width, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 100)
let heightConstraint = NSLayoutConstraint(item: buttonMessage, attribute: NSLayoutAttribute.height, relatedBy: NSLayoutRelation.equal, toItem: nil, attribute: NSLayoutAttribute.notAnAttribute, multiplier: 1, constant: 50)
let trailingToSuperView = NSLayoutConstraint(item: buttonMessage, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0)
trailingToSuperView.priority = 999
trailingToSuperView.isActive = true
buttonMessage.addConstraints([widthConstraint,heightConstraint])
}