De acordo com NSLayoutConstraints class
dentro UIKit Module
Se o nível de prioridade de uma restrição for menor que UILayoutPriorityRequired, ele será opcional. As restrições de prioridade mais alta são atendidas antes das restrições de prioridade mais baixa. A satisfação das restrições não é tudo ou nada. Se uma restrição 'a == b' for opcional, isso significa que tentaremos minimizar 'abs (ab)'. Esta propriedade só pode ser modificada como parte da configuração inicial ou quando opcional. Depois que uma restrição for adicionada a uma visualização, uma exceção será lançada se a prioridade for alterada de / para NSLayoutPriorityRequired.
Exemplo: - UIButton
restrições com várias prioridades -
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])
}