В UIKit, известны ли точные размеры View при вызове viewWillAppear?

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

Ответ

Нет, в viewWillAppear размеры view могут быть неактуальны или нулевыми. Лайаут представления ещё не завершён. Для получения гарантированно точных геометрических данных используйте:

  • viewDidLayoutSubviews() — вызывается после каждого изменения лайаута (наиболее точный метод).
  • viewDidAppear() — размеры уже установлены, но метод вызывается позже.

Пример:

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    // Размеры view.frame теперь актуальны
    print("Ширина: (view.frame.width), Высота: (view.frame.height)")
}

Почему? В viewWillAppear система может передавать размеры из предыдущего состояния интерфейса (например, до поворота устройства) или размеры, установленные в Storyboard, которые ещё не адаптировались к текущим условиям.