Почему подпредставление окна изначально расположено неправильно, но после поворота правильно расположено? - PullRequest
2 голосов
/ 07 сентября 2011

Рассмотрим следующую точку входа делегата приложения:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];

    // Custom view controller
    main = [[MainView alloc] initWithNibName:@"MainView" bundle:nil];
    [self.window addSubview:main.view];

    return YES;
}

Все является стандартным кодом Apple, кроме части «Контроллер пользовательского представления».Там пользовательский контроллер представления захватывается и эффективно добавляется в качестве основного вида приложения.

Проблема: виджеты в представлении на 20 пикселей выше, чем они должны быть.Другими словами, верхние 20 пикселей содержимого представления скрыты строкой состояния.

Но: после поворота представление и его содержимое расположены правильно, и перекрытие строки состояния больше не появляется.

Что здесь происходит?И, в частности, каков шаблон / наилучшая практика, чтобы убедиться, что все правильно расположено и при первоначальном добавлении подпредставления в окно?

Ответы [ 2 ]

4 голосов
/ 07 сентября 2011

Вы используете неправильный метод для инициализации фрейма вашего UIWindow. Вам следует использовать [[UIScreen mainScreen] applicationFrame] именно по той причине, о которой вы говорите. Прочитайте это для получения дополнительной информации (в основном applicationFrame заботится о проблеме в строке состояния).

1 голос
/ 07 сентября 2011

Я думаю, что поскольку вы использовали initWithFrame:[[UIScreen mainScreen] bounds] для инициализации фрейма (высота-480), а затем добавили подпредставление, при запуске приложения оно занимает весь экран (как вы и просили).Но когда вы поворачиваете его, размер рамки изменяется с учетом строки состояния. Поэтому проблема возникает только один раз, то есть в первый раз.Взгляните на этот мягкий вопрос: UIViewAutoresizingNone: изменить размер после поворота .

Чтобы убедиться в правильности позиционирования, также при первоначальном добавлении подпредставления в окно вы можете определить его frame размер и origin перед добавлением как subView.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...