Ответ
В UIKit система компоновки — это Auto Layout, декларативный механизм, основанный на ограничениях (constraints). Она динамически вычисляет размер и положение (frame) каждого UIView на основе математических отношений между его атрибутами и атрибутами других представлений или супервью.
Базовый пример: Центрирование кнопки.
let button = UIButton(type: .system)
view.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
// Позиция: центр кнопки совпадает с центром родительского view
button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
button.centerYAnchor.constraint(equalTo: view.centerYAnchor),
// Размер: фиксированные ширина и высота
button.widthAnchor.constraint(equalToConstant: 200),
button.heightAnchor.constraint(equalToConstant: 50)
])
Основные принципы Auto Layout:
- Ограничения (Constraints): Уравнения вида
view1.attribute = view2.attribute * multiplier + constant(например,button.leading = superview.leading + 20). - Приоритеты (Priority): Разрешают конфликтующие ограничения (значение от 1 до 1000).
- Внутренний размер (Intrinsic Content Size): Такие элементы, как
UILabelилиUIButton, сообщают системе свой "естественный" размер на основе контента. - Классы размеров (Size Classes): Позволяют задавать разные наборы ограничений для различных устройств и ориентаций (например,
compactvsregular).
Альтернатива: Ручная компоновка через установку свойства frame. Auto Layout предпочтительнее для создания адаптивных интерфейсов, поддерживающих разные размеры экранов.