Что такое система компоновки (layout) в UIKit?

«Что такое система компоновки (layout) в UIKit?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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:

  1. Ограничения (Constraints): Уравнения вида view1.attribute = view2.attribute * multiplier + constant (например, button.leading = superview.leading + 20).
  2. Приоритеты (Priority): Разрешают конфликтующие ограничения (значение от 1 до 1000).
  3. Внутренний размер (Intrinsic Content Size): Такие элементы, как UILabel или UIButton, сообщают системе свой "естественный" размер на основе контента.
  4. Классы размеров (Size Classes): Позволяют задавать разные наборы ограничений для различных устройств и ориентаций (например, compact vs regular).

Альтернатива: Ручная компоновка через установку свойства frame. Auto Layout предпочтительнее для создания адаптивных интерфейсов, поддерживающих разные размеры экранов.