За даними 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])
}