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