В каком методе жизненного цикла UIViewController следует устанавливать Auto Layout constraints?

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

Ответ

Constraints обычно устанавливают в viewDidLoad(). Для динамических обновлений используют viewDidLayoutSubviews() или updateViewConstraints().

Рекомендации по выбору метода:

  • viewDidLoad() — основной метод для первоначальной настройки статических constraints. Вью загружена, но её размеры ещё не определены.
  • viewDidLayoutSubviews() — если constraints зависят от окончательных размеров вью (например, нужно выровнять элемент относительно центра). Вызывается несколько раз (при повороте, изменении размера).
  • updateViewConstraints() — для сложной, изменяемой логики constraints. Система вызывает его при необходимости обновить layout.

Пример установки в viewDidLoad():

override func viewDidLoad() {
    super.viewDidLoad()
    let redView = UIView()
    redView.backgroundColor = .red
    view.addSubview(redView)

    redView.translatesAutoresizingMaskIntoConstraints = false
    NSLayoutConstraint.activate([
        redView.centerXAnchor.constraint(equalTo: view.centerXAnchor),
        redView.centerYAnchor.constraint(equalTo: view.centerYAnchor),
        redView.widthAnchor.constraint(equalToConstant: 100),
        redView.heightAnchor.constraint(equalToConstant: 100)
    ])
}

Важно: Избегайте установки constraints в loadView(), viewWillAppear(_:) или viewDidAppear(_:), чтобы не вызывать лишние операции расчёта layout.