Что такое Auto Layout в UIKit?

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

Ответ

Auto Layout — это система декларативной компоновки интерфейса в iOS/macOS, которая определяет положение и размеры элементов UI с помощью правил, называемых ограничениями (constraints). Она позволяет создавать адаптивные интерфейсы, корректно отображающиеся на разных размерах экранов, ориентациях и контенте.

Основной принцип: Вместо задания жестких координат (frame) вы описываете отношения между элементами (например, "эта кнопка находится на 20 пунктов ниже этого лейбла").

Пример настройки через Anchors (наиболее современный способ):

let button = UIButton(type: .system)
button.setTitle("Tap Me", for: .normal)
button.translatesAutoresizingMaskIntoConstraints = false // КРИТИЧЕСКИ ВАЖНО
view.addSubview(button)

// Активация ограничений
NSLayoutConstraint.activate([
    button.centerXAnchor.constraint(equalTo: view.safeAreaLayoutGuide.centerXAnchor),
    button.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 20),
    button.widthAnchor.constraint(greaterThanOrEqualToConstant: 120),
    button.heightAnchor.constraint(equalToConstant: 44)
])

Ключевые концепции:

  1. translatesAutoresizingMaskIntoConstraints = false: Обязательный шаг для элементов, чьи ограничения задаются вручную. Отключает автоматическую трансляцию старой системы autoresizingMask в ограничения.
  2. Типы ограничений: Равенство (equalTo), неравенство (greaterThanOrEqualTo, lessThanOrEqualTo) с константами и множителями (multiplier).
  3. Приоритет (priority): Разрешает конфликты, указывая, какое ограничение важнее (значение от 1 до 1000).
  4. Safe Area Layout Guide: Предпочтительная привязка к безопасным областям, чтобы избежать наложения на вырез или индикатор дома.
  5. Intrinsic Content Size: Собственный размер элементов (например, UILabel или UIButton), который Auto Layout учитывает автоматически.