Я работаю над приложением iPad, управляемым UINavigationController (тестирование в симуляторе). В стеке контроллеров навигации есть только два UIViewController. Для демонстрации, давайте назовем их SetupController и ContentController. SetupController помещает ContentController в стек с
[self.navigationController pushViewController:contentController animated:YES];
Просматривая содержимое, вы можете нажать кнопку «Назад», чтобы вернуться к контроллеру настройки. Если приложение работает в портретном режиме, все работает правильно.
Однако, когда приложение находится в альбомной ориентации, и я нажимаю кнопку «Назад», дела идут плохо. Стек контроллера представления обновляется должным образом (например, я вижу представление SetupController), но UINavigationBar не обновляется должным образом. Элементы панели UINavigation, связанные с ContentController, по-прежнему отображаются. Чтобы увидеть ожидаемые элементы SetupCotroller UINavigationBar, я должен нажать кнопку «Назад» второй раз, после чего UINavigationBar анимируется в правильное состояние. Опять же, это происходит только в ландшафтном режиме, портретный режим работает отлично.
В качестве теста. В методе [SetupController viewDidAppear:] я добавил следующий отладочный вывод
if(self.navigationController.navigationBar.topItem != self.navigationItem) {
NSLog(@"wrong nav item!");
} else {
NSLog(@"correct nav item!");
}
Я получаю «неправильное» сообщение, когда симулятор находится в ландшафтном режиме, и никогда, когда он находится в портретном режиме. Я попытался удалить все viewDidAppear: сообщения как из ViewControllers, так и из всех случаев, когда я изменяю их элементы навигации или саму панель навигации.
Есть мысли? Я предполагаю, что я делаю что-то здесь не так, но для меня это похоже на ошибку.