多个呈现的视图控制器和iPad上的旋转

jam*_*mie 7 objective-c ipad modalviewcontroller ios

我最近在将一些代码从iPhone应用程序移植到iPad时遇到了问题.它可能与此处描述的问题有关,但我发现该问题的解释/解决方案并不令人满意.场景是这样的:

  1. 视图控制器'A'(根视图控制器)使用"表单"模式演示样式呈现模态视图控制器(称为'B').

  2. 视图控制器B呈现具有"全屏"模态呈现样式的视图控制器"C".

  3. 当视图控制器C是最顶部呈现的视图控制器时,iPad旋转.

  4. 取消C后,B将重新显示,但方向不正确.

据我所知,链接多个呈现的视图控制器应该没有问题 - 实际上,在其他视图控制器文档中呈现视图控制器中明确支持此行为.我还在iOS 5发行说明中阅读了以下声明:

iOS 5中的旋转回调不适用于通过全屏显示的视图控制器.这意味着,如果你的代码呈现了另一个视图控制器视图控制器,然后用户随后旋转设备,以不同的取向,在解雇,底层控制器(即呈现控制器)将不会收到任何旋转回调.但请注意,呈现控制器在重新显示时将接收viewWillLayoutSubviews调用,并且可以从此方法查询interfaceOrientation属性并用于正确布局控制器.

据我所知,这不会发生 - 视图控制器B接收到对-shouldAutoRotateToInterfaceOrientation的调用,但此调用中的interfaceOrientation参数的值是视图控制器B在呈现视图控制器C时的接口方向的值,而不是值解雇后C的界面取向 由于我们在iPad上,所有这些视图控制器都在-shouldAutoRotateToInterfaceOrientation中返回YES.因此B视图的界限永远不会改变,所以-willLayoutSubviews永远不会被调用.

我已经尝试在B解除它之前将视图控制器C的方向保存在回调中,然后在下次使用该信息时调用theAouldAutoRotateToInterfaceOrientation,并且仅在C被解除时返回Y的方向.这修复了,在没有进行此检查的情况下出现的损坏的UI,但是视图控制器B没有将其界面方向更新为此值,因此后续的模态演示将从设备的错误侧进行动画制作.

有没有人能够成功获得这样的视图控制器配置?它似乎并不像一个场景那么不寻常,所以我有点惊讶它没有像我最初预期的那样工作.

提前致谢.

ade*_*der 0

在我看来,如果不使用导航控制器,多个链式模态视图控制器会导致令人困惑和烦人的用户体验。我认为视图控制器 B 应该位于导航控制器中(如果您不想,则不必显示导航栏)。

模态表示实际上应该适用于单个死胡同实体(单个视图控制器或包含多个子视图控制器的导航控制器)。

出于兴趣,你是说这在 iPhone 上运行良好但在 iPad 上不行吗?或者iPhone版本不允许旋转?

我还发现这个线程说从根视图控制器呈现模式视图控制器可能会有所帮助。