Что использовать для адаптации интерфейса под разные ориентации: Auto Layout или ручной расчет frame?

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

Ответ

Однозначно Auto Layout (или SwiftUI). Ручной расчет frame устарел для этой задачи.

Почему Auto Layout?

  • Декларативность: Вы описываете отношения между элементами (constraints), а система сама вычисляет frames.
  • Адаптивность: При изменении размера (поворот, разные устройства) constraints автоматически пересчитываются.
  • Меньше кода и ошибок: Не нужно отслеживать viewWillLayoutSubviews() для ручного обновления.

Пример с Auto Layout (UIKit):

let button = UIButton()
view.addSubview(button)
button.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([
    button.centerXAnchor.constraint(equalTo: view.centerXAnchor),
    button.centerYAnchor.constraint(equalTo: view.centerYAnchor),
    button.widthAnchor.constraint(equalToConstant: 200),
    button.heightAnchor.constraint(equalToConstant: 50)
])
// Кнопка останется по центру при любом повороте.

Проблема frame-подхода:

// Этот код разместит кнопцу только при первом запуске.
button.frame = CGRect(x: (view.bounds.width - 200) / 2,
                      y: (view.bounds.height - 50) / 2,
                      width: 200,
                      height: 50)
// Для поддержки поворота нужно пересчитывать frame в viewWillLayoutSubviews()
// Это ведет к раздуванию и усложнению view-контроллера.

Вывод: Для современной разработки используйте Auto Layout (UIKit) или SwiftUI.