Выбор ответа Junior UIKit обновлено

Где брать финальный размер view

Вопрос

Почему в viewDidLoad нельзя полагаться на view.bounds для расчёта раскладки?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Размеры ещё не выставлены; финальные будут в viewDidLayoutSubviews. В viewDidLoad view создано, но его размер часто ещё взят из storyboard или равен размеру по умолчанию: раскладку контейнер (навигация, safe area, ротация) делает позже.

Варианты ответа

  1. bounds в viewDidLoad всегда равен нулю, и расчёт приводит к крэшу
  2. В viewDidLoad view ещё не создано, обращение к нему загрузит его заново
  3. Размеры ещё не выставлены; финальные будут в viewDidLayoutSubviewsправильный ответ
  4. bounds доступен только в viewDidAppear, до этого он nil

Разбор

В viewDidLoad view создано, но его размер часто ещё взят из storyboard или равен размеру по умолчанию: раскладку контейнер (навигация, safe area, ротация) делает позже. Ручные расчёты фреймов делают в viewDidLayoutSubviews или layoutSubviews, а лучше вообще поручают Auto Layout. Крэша нет, просто значения неверные. Ждать viewDidAppear поздно: пользователь увидит прыжок.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.