У меня довольно простая настройка с помощью UINavigationController внутри UITabBarController. Я хочу программно отобразить представление rootViewController этого навигатора, но когда я смотрю на self.view.frame внутри viewDidLoad, я получаю это (например, в ландшафте):
1. view frame: {{20, 0}, {748, 1024}} // looks like an odd portrait mode
Затем я авторотируюсь в Portrait, и я получаю следующее:
2. view frame: {{0, 0}, {768, 911}}
Затем, когда я вернусь к Landscape, рамка теперь выглядит следующим образом:
3. view frame: {{0, 0}, {1024, 655}}
И дальнейшие события авторотации будут триггерами между значениями фрейма # 2 и # 3.
Чтобы обойти странность №1, я сейчас делаю это в viewDidLoad:
if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) {
self.view.frame = CGRectMake(0, 0, 768, 911);
} else {
self.view.frame = CGRectMake(0, 0, 1024, 655);
}
Мне кажется, что я, очевидно, что-то пропустил. Почему рамка по умолчанию представления не соответствует кадру, когда он авторотирует обратно в одну и ту же ориентацию? Не отображается ли рамка представления исходной ориентации? Очень смутно...
Я должен упомянуть, что ни один из вышеперечисленных, в том числе мой клоунский хак, ничего не меняет визуально. Причина, по которой у меня есть взлома, заключается в том, что когда я компонурую свои подвид в этом представлении, они будут основаны на том, где я ожидаю, что они будут, что является верхним левым углом под панелью навигации.
Что я делаю неправильно?
UPDATE: выключение всех элементов автозадания в представлении изменений приводит к результату # 1:
view frame: {{0, 0}, {748, 1024}}
Это кажется немного ближе, но все же не соответствует # 3.