Согласно NSLayoutConstraints class
внутри UIKit Module
Если уровень приоритета ограничения меньше UILayoutPriorityRequired, то это необязательно. Ограничения с более высоким приоритетом выполняются перед ограничениями с более низким приоритетом. Удовлетворение ограничений - это еще не все или ничего. Если ограничение 'a == b' является необязательным, это означает, что мы попытаемся минимизировать 'abs (ab)'. Это свойство может быть изменено только при первоначальной настройке или по желанию. После того, как ограничение было добавлено к представлению, будет выброшено исключение, если приоритет изменится с / на NSLayoutPriorityRequired.
Пример: - UIButton
ограничения с разными приоритетами -
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])
}