NSLayoutAnchor — альтернатива NSLayoutConstraint
До выхода iOS 9 программное создание ограничений происходило через инициализацию объектов NSLayoutConstraint, включавшую длинный список передаваемых аргументов или код на Visual Format Language, однако с появлением нового класса NSLayoutAnchor процесс можно заметно упростить.
По сути, теперь ограничиваемые атрибуты добавлены в UIView как свойства с типом одного из подклассов NSLayoutAnchor: NSLayoutXAxisAnchor (для горизонтальных ограничений), NSLayoutYAxisAnchor (вертикальных) или NSLayoutDimension (высоты и ширины). И установка ограничений с нужными взаимосвязями доступна через их методы.
if #available(iOS 9.0, *) {
view.widthAnchor.constraintEqualToAnchor(view.heightAnchor, multiplier: 0.5).active = true
view.centerXAnchor.constraintEqualToAnchor(self.centerXAnchor, constant: 10).active = true
view.centerYAnchor.constraintEqualToAnchor(self.centerYAnchor, constant: 10).active = true
view.widthAnchor.constraintLessThanOrEqualToAnchor(self.widthAnchor).active = true
view.heightAnchor.constraintLessThanOrEqualToAnchor(self.heightAnchor).active = true
} else {
addConstraints([
NSLayoutConstraint(item: view,
attribute: .Width,
relatedBy: .Equal,
toItem: view,
attribute: .Height,
multiplier: 0.5,
constant: 0),
NSLayoutConstraint(item: view,
attribute: .CenterX,
relatedBy: .Equal,
toItem: self,
attribute: .CenterX,
multiplier: 1,
constant: 10),
NSLayoutConstraint(item: view,
attribute: .CenterY,
relatedBy: .Equal,
toItem: self,
attribute: .CenterY,
multiplier: 1,
constant: 10),
NSLayoutConstraint(item: view,
attribute: .Width,
relatedBy: .LessThanOrEqual,
toItem: self,
attribute: .Width,
multiplier: 1,
constant: 0),
NSLayoutConstraint(item: view,
attribute: .Height,
relatedBy: .LessThanOrEqual,
toItem: self,
attribute: .Height,
multiplier: 1,
constant: 0)
])
}