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