В каком методе жизненного цикла UIViewController окончательно известны размеры его корневой вью (view)?

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

Ответ

Окончательные, актуальные размеры корневой вью (view.bounds) становятся известны в методе viewDidLayoutSubviews().

Почему именно здесь? Этот метод вызывается после того, как система:

  1. Рассчитала layout для всех subviews (включая корневую вью).
  2. Установила их окончательные frame (размеры и положение).

Особенности метода:

  • Многократный вызов: Вызывается при каждом изменении layout (поворот устройства, изменение размера, обновление constraints).
  • Используйте флаги для кода, который должен выполниться только при первом layout.

Пример получения размера вью:

private var isInitialLayoutDone = false

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    // Получаем окончательный размер корневой вью
    let viewSize = view.bounds.size
    print("View size: (viewSize)")

    // Код для однократного выполнения после первого layout
    if !isInitialLayoutDone {
        isInitialLayoutDone = true
        configureInitialLayoutBasedOnSize(viewSize)
    }
}

Важно: В viewDidLoad() и viewWillAppear(_:) размеры вью могут быть неверными (например, равными размеру экрана в Storyboard, а не реальному).