6

我有两个 UIViewController,“A”和“B”,其中“A”覆盖 shouldAutorotateToInterfaceOrientation 为 UIInterfaceOrientationPortrait 返回 YES,而“B”对所有方向返回 YES。在我的示例中,“A”是根导航视图控制器,然后我将 pushViewController 用于“B”。之后我将设备旋转到横向,它成功地自动旋转“B”,然后我弹出“B”(后退按钮或通过 popViewController)返回到“A”。

以 iPhone OS 3.1.3 为目标时,“A”按预期返回纵向。以 iPhone OS 3.2 为目标时,我有两个副作用:

  1. “A”以横向显示。
  2. 即使现在显示“A”,导航栏也不会更新。导航栏仍然显示“B”的项目。只有在尝试再返回/弹出一次之后,导航栏才会动画显示“A”的项目。如果我尝试再次按“B”并返回,则必须在导航栏动画显示“A”项目之前弹出两次。在这些“中间弹出”期间,“A”的视图仍然显示。

在研究这个问题时,我看到其他答案建议手动执行旋转([UIDevice setOrientation] 或通过转换),但这无助于理解问题所在,尤其是为什么它在两个操作系统之间的行为不同。

所以我的问题是:UINavigationController 堆栈上的所有 UIViewController 都必须支持完全相同的方向吗?如果没有,那么我需要做些什么来让它像 OS 3.1.3 一样运行吗?

4

2 回答 2

1

似乎较新的操作系统要求 UINavigationController 堆栈中的所有 UIViewController 支持相同的方向集。

于 2010-06-10T18:55:06.503 回答
0

我有同样的问题,我在这个链接上找到了答案:UINavigationController navigation stack questions in Landscape mode我的一个视图控制器在 shouldAutorotateToInterfaceOrientation 上没有返回 YES。

于 2010-05-11T06:46:52.860 回答