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)
    ])
}