Ответ
NSLayoutConstraint (констрейнт) — это объект, который описывает математическое соотношение между атрибутами (layout attributes) двух элементов интерфейса или элемента и его супервью в системе Auto Layout. Он определяет правила для позиционирования и задания размеров.
Основные компоненты констрейнта:
- firstItem, firstAttribute: Первый элемент и его атрибут (например,
.leading,.centerY,.width). - relation: Соотношение (
==,>=,<=). - secondItem, secondAttribute: Второй элемент и его атрибут.
- multiplier & constant: Множитель и константа для линейного уравнения:
firstAttribute = secondAttribute * multiplier + constant. - priority: Приоритет (
UILayoutPriority) от 1 до 1000 для разрешения конфликтов. - isActive: Флаг активности констрейнта.
Пример создания и активации констрейнтов:
let button = UIButton()
view.addSubview(button)
// 1. Обязательный шаг
button.translatesAutoresizingMaskIntoConstraints = false
// 2. Создание и активация
NSLayoutConstraint.activate([
// Центрирование по X и Y
button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
button.centerYAnchor.constraint(equalTo: view.centerYAnchor),
// Фиксированная ширина и высота
button.widthAnchor.constraint(equalToConstant: 200),
button.heightAnchor.constraint(equalToConstant: 50)
])
Важные нюансы:
translatesAutoresizingMaskIntoConstraints = falseнеобходимо устанавливать для всех элементов, чьи констрейнты задаются вручную.- Для создания однозначной и непротиворечивой (satisfiable) системы констрейнтов необходимо задать положение (X, Y) и размер (ширина, высота) для каждого элемента.
- Динамическое включение/отключение констрейнтов через
isActiveэффективнее, чем их удаление и повторное создание.