Auto Layout — это декларативная система макетирования для элементов пользовательского интерфейса. Она определяет размеры и положения элементов на основе отношений между ними.
Работает он следующим образом:
- Ограничения (Constraints): Вместо фиксированных координат и размеров, Auto Layout использует ограничения. Ограничение — это правило, определяющее отношение между двумя атрибутами элементов интерфейса. Примеры атрибутов:
leading, trailing, top, bottom, centerX, centerY, width, height.
- Система уравнений: Auto Layout решает систему линейных уравнений для определения конечного положения и размера каждого элемента. Каждое ограничение преобразуется в уравнение. Например, ограничение на выравнивание левого края кнопки по левому краю родительского представления с отступом в 20 единиц может быть представлено как
button.leading = parent.leading + 20.
- Приоритеты: Ограничения могут иметь приоритет от 1 до 1000. Приоритет 1000 (Required) означает, что ограничение должно быть выполнено обязательно. Меньшие приоритеты используются для определения предпочтительных, но не обязательных отношений. Это позволяет системе выбрать наиболее подходящие значения, если существует несколько возможных решений.
- Внутреннее содержимое (Intrinsic Content Size): Некоторые элементы, такие как
UILabel, UIButton, имеют естественный размер, основанный на их содержимом. Auto Layout учитывает эти размеры при решении уравнений.
- Процесс Layout: Когда параметры макета изменяются (например, при повороте устройства или изменении размера окна), Auto Layout пересчитывает все уравнения, чтобы определить новое положение и размер элементов. Этот процесс происходит в несколько этапов:
- Update Constraints: На этом этапе обновляются значения ограничений, зависящие от внешних факторов.
- Layout: Auto Layout решает систему уравнений и определяет конечные фреймы (положение и размер) всех представлений.
- Display: Элементы перерисовываются в соответствии с новыми фреймами.
Преимущества Auto Layout:
- Адаптивность: Автоматически подстраивает макет под различные размеры экранов и ориентации устройства.
- Удобство: Упрощает создание сложных макетов с изменяющимся содержимым.
- Поддержка локализации: Легко обрабатывает текст на разных языках с разной длиной.
swift
Auto Layout может быть реализован как визуально в Interface Builder с использованием Storyboards и XIB-файлов, так и программно с использованием Anchor API или VFL (Visual Format Language).