Ответ
Однозначно 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.