Ответ 1
Это очень похожий вопрос на ios setContentOffset не работает на iPad... И мой ответ такой же, как и там:
"Вы не должны инициализировать объекты, связанные с геометрией пользовательского интерфейса, в viewDidLoad
, потому что геометрия вашего представления не установлена в этой точке, и результаты будут непредсказуемыми.
... viewWillAppear:
- это правильное место для выполнения этих задач, на этом этапе геометрия задается так, что получение и установка свойств, связанных с геометрией, имеет смысл ".
Это также относится к свойствам, связанным с геометрией. Не отвлекайтесь на то, чтобы вести себя правильно в одном случае, а не в другом... Главное, что установка/получение свойств геометрии слишком рано приведет к непредсказуемым результатам.
Ваш экран выглядит правильно, потому что вы видите результаты после viewWillAppear:
/viewDidAppear:
.
update (ios6)
При использовании автозапуска в ios6 кадры не устанавливаются до тех пор, пока не будут выложены подсмотры. Правильное место для получения данных кадра в этих условиях находится в методе viewController viewDidLayoutSubviews
.
Это называется после viewWillAppear:
. Но будьте осторожны - их не всегда называют вместе. Например, viewDidLayoutSubviews
вызывается после вращения, viewWillAppear:
- нет. viewWillAppear:
вызывается каждый раз, когда представление становится видимым видом *, viewDidLayoutSubviews
не обязательно (только если просмотры должны быть ретранслированы).
(* если приложение не было основано и становится приоритетным приложением, тогда viewWillAppear:
не вызывается)