>视图控制器’A'(根视图控制器)使用“表单”模式演示样式呈现模态视图控制器(称为’B’).
>视图控制器B使用“全屏”模式演示样式呈现视图控制器“C”.
>旋转iPad,而视图控制器C是最顶级的视图控制器.
>一旦解除C,B将重新显示,但方向不正确.
据我所知,链接多个呈现的视图控制器应该没有问题 – 实际上,Presenting View Controllers from Other View Controllers文档中明确支持这种行为.我还在iOS 5 Release Notes中阅读了以下声明:
Rotation callbacks in iOS 5 are not applied to view controllers that are presented over a full screen. What this means is that if your code presents a view controller over another view controller,and then the user subsequently rotates the device to a different orientation,upon dismissal,the underlying controller (i.e. presenting controller) will not receive any rotation callbacks. Note however that the presenting controller will receive a viewWillLayoutSubviews call when it is redisplayed,and the interfaceOrientation property can be queried from this method and used to lay out the controller correctly.
据我所知,这不会发生 – 视图控制器B接收到对-shouldAutoRotateToInterfaceOrientation的调用,但此调用中的interfaceOrientation参数的值是视图控制器B在呈现视图控制器C时的接口方向的值,而不是值解雇后C的界面取向由于我们在iPad上,所有这些视图控制器都在-shouldAutoRotateToInterfaceOrientation中返回YES.因此B视图的界限永远不会改变,所以-willLayoutSubviews永远不会被调用.
我已经尝试在B解除它之前将视图控制器C的方向保存在回调中,然后在下次使用该信息时调用theAouldAutoRotateToInterfaceOrientation,并且仅在C被解除时返回Y的方向.这修复了,在没有进行此检查的情况下出现的损坏的UI,但是视图控制器B没有将其界面方向更新为此值,因此后续的模态演示将从设备的错误侧进行动画制作.
有没有人能够成功获得这样的视图控制器配置?它似乎并不像一个场景那么不寻常,所以我有点惊讶它没有像我最初预期的那样工作.
提前致谢.
解决方法
模态演示实际上应该是针对单个死胡同的实体(单个视图控制器或包含多个子视图控制器的导航控制器).
出于兴趣,您是说这在iPhone上运行良好但在iPad上运行不正常吗?或者你不允许在iPhone版本上轮换?
我还发现this thread表示从根视图控制器呈现模态视图控制器可能有所帮助.