Ответ
На практике применяются несколько основных подходов, часто в комбинации:
1. Interface Builder (Storyboard/XIB)
- Плюсы: Визуальный контроль, быстрое прототипирование, уменьшение boilerplate-кода.
- Минусы: Сложность merge конфликтов в больших командах, ограниченная динамичность.
- Пример: Создание статичных экранов, мастер-экранов onboarding.
2. Программная верстка (NSLayoutAnchor / SnapKit)
- Плюсы: Полный контроль, легкий code review, избегание merge конфликтов, динамическая конфигурация.
- Минусы: Больше кода, нет визуального предпросмотра (без SwiftUI Previews).
// Пример с NSLayoutAnchor let label = UILabel() view.addSubview(label) label.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ label.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 20), label.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16), label.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -16) ])
// Пример с SnapKit (более лаконичный синтаксис) label.snp.makeConstraints { make in make.top.equalTo(view.safeAreaLayoutGuide).offset(20) make.horizontalEdges.equalToSuperview().inset(16) }
**3. Декларативная верстка (SwiftUI)**
* **Плюсы:** Крайняя лаконичность, live preview, реактивная модель данных, кроссплатформенность.
* **Минусы:** Требует iOS 13+, некоторые компоненты UIKit недоступны.
```swift
struct ProfileView: View {
@State private var username: String = ""
var body: some View {
VStack(spacing: 20) {
TextField("Enter name", text: $username)
.textFieldStyle(.roundedBorder)
Button("Save") { saveUsername(username) }
.disabled(username.isEmpty)
}
.padding()
}
}
4. Композитные подходы:
- UIStackView: Для группировки и динамического распределения вложенных вью.
- Комбинированный: Базовая структура в Storyboard, сложные/кастомные элементы — кодом.
- UIViewRepresentable/UIViewControllerRepresentable: Для интеграции UIKit-компонентов в SwiftUI.
Критерии выбора:
- SwiftUI — для новых проектов с таргетом iOS 13+.
- Программная верстка — для больших legacy-проектов, сложных динамических интерфейсов.
- Storyboard — для небольших проектов или команд, начинающих с iOS.