Я никогда не полагаюсь на [[UIScreen mainScreen] applicationFrame]
, особенно во время запуска приложения.
При создании представлений в коде используйте суперпредставление для установки кадра.
Если вы используете xibs с «симулированными элементами интерфейса», они будут иметь правильный размер и все будет отлично работать.
Приложения на основе UINavigationController
В случае приложения на основе UINavigationController возьмите фрейм непосредственно из self.navigationController.view
, не пытайтесь использовать [self loadView]
и self.view.superview
. UINavigationController использует «скрытые» подпредставления для выполнения своей работы, поэтому прямое суперпредставление не будет работать.
UINavigationController является особенным, потому что во время запуска приложения контроллер навигации изменяет размеры ваших представлений после вызова loadView
. При автоматическом изменении размера вы получаете небольшой запас в нижней части экрана.
Почему бы не UIScreen
[[UIScreen mainScreen] applicationFrame]
не работает надежно (особенно при запуске приложения в альбомной ориентации). По моему опыту, свойство interfaceOrientation
viewcontroller не будет соответствовать ориентации applicationFrame
.