Ответ
Корневое view контроллера можно создать, переопределив метод loadView().
Назначение: Система вызывает этот метод, когда требуется создать view-иерархию контроллера. Если метод не переопределен, iOS загружает view из storyboard или nib-файла.
Пример создания view вручную:
class CustomViewController: UIViewController {
override func loadView() {
// 1. Создаем кастомное view
let customView = UIView()
customView.backgroundColor = .systemBackground
// 2. Добавляем subviews
let label = UILabel()
label.text = "Hello, World!"
customView.addSubview(label)
// ... настройка constraints
// 3. КРИТИЧЕСКИ ВАЖНО: присвоить self.view
self.view = customView
}
// viewDidLoad() будет вызван после loadView()
override func viewDidLoad() {
super.viewDidLoad()
// Дополнительная настройка уже созданного view
}
}
Ключевые правила:
- Не вызывайте
super.loadView(), если создаете view полностью самостоятельно. - Обязательно присвойте свойство
self.view, иначе произойдет crash. - Метод
loadView()вызывается один раз за жизненный цикл контроллера, доviewDidLoad(). - Используйте этот метод, когда view создается исключительно кодом, без Interface Builder.