Según el NSLayoutConstraints class
interior UIKit Module
Si el nivel de prioridad de una restricción es menor que UILayoutPriorityRequired, entonces es opcional. Las restricciones de mayor prioridad se cumplen antes que las restricciones de menor prioridad. La satisfacción de la restricción no es todo o nada. Si una restricción 'a == b' es opcional, eso significa que intentaremos minimizar 'abs (ab)'. Esta propiedad solo puede modificarse como parte de la configuración inicial o cuando sea opcional. Después de que se ha agregado una restricción a una vista, se lanzará una excepción si la prioridad se cambia de / a NSLayoutPriorityRequired.
Ejemplo: - UIButton
restricciones con varias 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])
}