Secondo NSLayoutConstraints class
dentro UIKit Module
Se il livello di priorità di un vincolo è inferiore a UILayoutPriorityRequired, è facoltativo. I vincoli di priorità più alta vengono soddisfatti prima dei vincoli di priorità più bassa. La soddisfazione dei vincoli non è tutto o niente. Se un vincolo "a == b" è opzionale, significa che tenteremo di ridurre al minimo "abs (ab)". Questa proprietà può essere modificata solo come parte della configurazione iniziale o quando opzionale. Dopo che un vincolo è stato aggiunto a una visualizzazione, verrà generata un'eccezione se la priorità viene modificata da / a NSLayoutPriorityRequired.
Esempio: - UIButton
vincoli con varie priorità -
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])
}