popViewController не выполняет автоматический возврат к разрешенной ориентации
У меня есть два UIViewControllers, "A" и "B", где "A" переопределяет shouldAutorotateToInterfaceOrientation, чтобы вернуть YES для UIInterfaceOrientationPortrait, а "B" возвращает YES для всех ориентаций. В моем примере "A" является корневым контроллером представления навигации, а затем я использую pushViewController для "B". После этого я поворачиваю устройство в альбомную ориентацию, которая успешно автоматически поворачивает "B", затем я нажимаю "B" (кнопка "назад" или через popViewController), чтобы вернуться к "A".
При нацеливании на iPhone OS 3.1.3 "А" возвращается в портретную ориентацию, как и ожидалось. При назначении iPhone OS 3.2 у меня есть два побочных эффекта:
- "А" отображается в альбомной ориентации.
- Панель навигации не обновляется, хотя теперь отображается "A". Панель навигации по-прежнему показывает элементы для "B". Только после попытки вернуться назад / всплыть еще раз анимация на панели навигации покажет элементы для "A". Если я вместо этого попытаюсь снова нажать "B" и вернуться назад, мне придется дважды щелкнуть, прежде чем навигационная панель оживит, чтобы показать элементы для "A". Во время этих "промежуточных всплывающих окон" вид "А" остается отображенным.
Исследуя эту проблему, я видел другие ответы, предлагающие выполнить ротацию вручную ([UIDevice setOrientation] или с помощью преобразования), однако это не помогает понять, в чем заключается проблема, особенно почему она ведет себя по-разному между двумя ОС.
Итак, мой вопрос: должны ли все мои UIViewControllers в стеке UINavigationController поддерживать точно такие же ориентации в будущем? А если нет, то нужно ли мне что-то сделать, чтобы он вел себя так же, как и для OS 3.1.3?
2 ответа
Похоже, что более новые ОС требуют, чтобы все UIViewController в стеке UINavigationController поддерживали один и тот же набор ориентаций.
У меня та же проблема, и я нашел ответ по этой ссылке: Проблемы со стеком навигации UINavigationController в ландшафтном режиме, один из моих контроллеров представления не возвращал YES на shouldAutorotateToInterfaceOrientation.