6

У меня есть два UIViewControllers, «A» и «B», где «A» переопределяет mustAutorotateToInterfaceOrientation, чтобы вернуть YES для UIInterfaceOrientationPortrait, а «B» возвращает YES для всех ориентаций. В моем примере «A» является корневым контроллером представления навигации, а затем я использую pushViewController для «B». После этого я поворачиваю устройство в пейзаж, который успешно авторотирует «B», затем я поп «B» (кнопка «Назад» или через popViewController), чтобы вернуться к «A».popViewController не авторотирует обратно в разрешенную ориентацию

При настройке iPhone OS 3.1.3 «A» возвращается к портретной ориентации, как ожидалось. При настройке iPhone OS 3.2 у меня есть два побочных эффекта:

  1. «A» отображается в ландшафте.
  2. Навигационная панель не обновляется, хотя отображается «A». На навигационной панели по-прежнему отображаются элементы для «B». Только после попытки вернуться/поп еще один раз будет отображаться панель навигации, чтобы отобразить элементы для «А». Если я вместо этого попытаюсь снова нажать «B» и вернусь назад, я должен дважды нажать перед тем, как панель навигации оживит, чтобы показать элементы для «A». Во время этих «промежуточных попсов» отображается вид «А».

При исследовании этого вопроса, я видел другие ответы, предполагающие выполнение поворота вручную ([UIDevice setOrientation] или через tranformation), однако это не помогает понять, в чем проблема, особенно, почему он ведет себя по-разному между две ОС.

Итак, мой вопрос: должны ли все мои UIViewControllers в стеке UINavigationController поддерживать точно такие же ориентации в будущем? А если нет, то есть ли что-то, что мне нужно сделать, чтобы заставить его вести себя так же, как и для ОС 3.1.3?

+1

Эта проблема также возникает в iPhone OS 4.0. – iamj4de

+0

Происходит ли такое поведение как на устройстве, так и на симуляторе? У меня была аналогичная проблема, которая произошла только на симуляторе из-за ошибок симулятора. – MrHen

ответ

1

Похоже, что новые ОС требуют, чтобы все UIViewControllers в стеке UINavigationController поддерживали один и тот же набор ориентаций.

0

У меня такая же проблема, и я нашел ответ по этой ссылке: UINavigationController navigation stack problems in landscape mode Один из моих контроллеров не был возвращен ДА на shouldAutorotateToInterfaceOrientation.

+0

Спасибо за ответ. В моем случае как «A», так и «B» возвращают значения для shouldAutorotateToInterfaceOrientation, а «A» возвращает YES только для портрета, поскольку это единственный, который он поддерживает. Должен ли я вернуть YES для контроллера просмотра, о котором я не знаю (ни A, ни B)? – JoeGaggler

Смежные вопросы