UINavigationBar не обновляется на «назад» в ландшафте - PullRequest
4 голосов
/ 09 апреля 2010

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

Есть мысли? Я предполагаю, что я делаю что-то здесь не так, но для меня это похоже на ошибку.

1 Ответ

6 голосов
/ 09 апреля 2010

Я столкнулся с той же проблемой. Это странно, но вам нужно убедиться, что на всех контроллерах представления в стеке реализовано следующее (даже если все отображается корректно повернуто):

  • (BOOL) shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation) interfaceOrientation { вернуть ДА; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...