Ответ
1. Ручное позиционирование (Frame-based)
Прямое задание frame, bounds или center. Подходит для кастомной анимации или высокопроизводительных view.
view.frame = CGRect(x: 20, y: 20, width: 100, height: 100)
2. Автоматическое изменение размера (Autoresizing Masks) Устаревший механизм, определяющий, как view изменяет размер относительно superview. Работает в паре с frame-based layout.
view.autoresizingMask = [.flexibleWidth, .flexibleTopMargin]
3. Авто-лейаут (Auto Layout) Основной современный способ. Позволяет описывать отношения (констрейнты) между элементами.
view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
view.topAnchor.constraint(equalTo: superview.topAnchor, constant: 20),
view.leadingAnchor.constraint(equalTo: superview.leadingAnchor, constant: 20),
view.widthAnchor.constraint(equalToConstant: 100)
])
Можно задавать и через Visual Format Language: "H:|-[view]-|".
4. Стек-вью (UIStackView) Контейнер, который автоматически управляет layout дочерних view по оси (горизонтально или вертикально). Часто используется внутри Auto Layout.
5. Интерфейс Билдер (Storyboard/XIB) Визуальный редактор, который генерирует Auto Layout констрейнты или Stack Views.
Практика: Для большинства интерфейсов используется комбинация Auto Layout и UIStackView. Frame-based подход остается для специфических задач, например, ручного управления анимацией layer.