Это подвох

я есть довольно базовая установка с UINavigationController внутри UITabBarController. Я хочу программно разметить представление rootViewController этого navcontroller, но когда я смотрю на 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}}

Затем, когда я возвращаюсь к Пейзажу, кадр теперь такой:

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);
}

Я чувствую, что я явно что-то здесь упускаю. Почему стандартный кадр представления не соответствует кадру, когда он автоматически поворачивается назад в ту же ориентацию? Разве рамка просмотра не установлена ​​в исходную ориентацию? Очень смущенный...

Я должен отметить, что ничего из вышеперечисленного, в том числе мой хакерский взлом, ничего не меняет визуально. Причина, по которой у меня есть хак, заключается в том, что когда я размещаю свои подпредставления в этом представлении, они будут основаны на том месте, где я их ожидаю, то есть в верхнем левом углу под панелью навигации.

Что я делаю неправильно?

ОБНОВЛЕНИЕ: отключение всех элементов авторазмера в представлении изменяет результат # 1, чтобы быть:

view frame: {{0, 0}, {748, 1024}}

Это кажется немного ближе, но все еще не соответствует # 3.

Ответы на вопрос(2)

Ваш ответ на вопрос