我有两个 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 为目标时,我有两个副作用:
- “A”以横向显示。
- 即使现在显示“A”,导航栏也不会更新。导航栏仍然显示“B”的项目。只有在尝试再返回/弹出一次之后,导航栏才会动画显示“A”的项目。如果我尝试再次按“B”并返回,则必须在导航栏动画显示“A”项目之前弹出两次。在这些“中间弹出”期间,“A”的视图仍然显示。
在研究这个问题时,我看到其他答案建议手动执行旋转([UIDevice setOrientation] 或通过转换),但这无助于理解问题所在,尤其是为什么它在两个操作系统之间的行为不同。
所以我的问题是:UINavigationController 堆栈上的所有 UIViewController 都必须支持完全相同的方向吗?如果没有,那么我需要做些什么来让它像 OS 3.1.3 一样运行吗?