[这张贴在Apple Developer Forums上,但尚未得到解答,所以我会在这里试试。]
我的应用程序使用UISplitViewController进行iPad主/详细视图,并在iOS 6上运行。拆分视图控制器是其窗口的根视图控制器。详细视图主要包含嵌入在UINavigationController中的UIWebView。详细视图中唯一的其他元素是导航控制器提供的工具栏和导航栏。当Web视图显示包含嵌入的YouTube视频的页面时,用户可以全屏显示视频。这一切都是由UIWebView完成的 - 我不负责创建全屏视频播放器。如果重要的是,一旦视频播放器被置于全屏视图中,UIApplication共享实例的keyWindow不是视频播放期间的主应用程序窗口,而是MPFullScreenTransitionViewController的实例。
如果用户在此全屏播放期间旋转设备,然后结束播放,则UISplitViewController无法正确放置其子设备。方法
splitViewController:willHideViewController:withBarButtonItem:forPopoverController:
和
splitViewController:willShowViewController:invalidatingBarButtonItem:
从不调用委托的(在这种情况下,详细视图控制器)。
如果在播放全屏视频时将设备旋转到横向,则取消电影播放器会导致显示详细视图控制器,该控制器会保留其以前的条形按钮项以在弹出窗口中绘制主视图控制器(尽管点击按钮不会产生任何动作)。在绘制主视图控制器的情况下,仅存在黑色区域。在详细视图控制器中向右滑动将滑出覆盖黑色区域的主视图控制器,但这仍然作为弹出窗口而不是持久视图存在。
如果在播放全屏视频时将设备旋转为纵向,则取消电影播放器会导致显示缺少条形按钮项目的详细视图控制器,以在弹出框中绘制主视图控制器。详细视图控制器具有正确的宽度,并且主视图控制器不可见,因此除了缺少的条形按钮项之外,详细视图的外观几乎与预期一致。
在这两种情况下,在出现错误视图后手动旋转设备将恢复正常的应用程序功能。但是,依靠用户旋转(或双旋转)设备来修复绘图问题显然是不可接受的。
是否有某种方法可以确保分割视图控制器在其所有子节点都消失在模态电影播放器后时才会发现设备旋转?
答案 0 :(得分:2)
用户SamuraiZack在Apple Developer论坛上提出了答案。在UISplitViewController的委托中,在viewWillAppear中强制重新分配拆分视图控制器:
[self.splitViewController.view setNeedsLayout];
[self.splitViewController.view layoutIfNeeded];
可以在Apple Developer forums上查看原始回复。