2013-05-21 47 views
3

[这是张贴在Apple Developer Forums但一直没有得到答复,所以我会尽力在这里。]UISplitViewController无法识别设备旋转

我的应用程序使用UISplitViewController为iPad主/详细视图和在iOS 6上运行。分离视图控制器是其窗口的根视图控制器。详细视图主要由嵌入在UINavigationController中的UIWebView组成。详细视图中唯一的其他元素是导航控制器提供的工具栏和导航栏。当网络视图显示带有嵌入式YouTube视频的页面时,用户可以将视频全屏显示。这全部由UIWebView完成---我不负责创建全屏视频播放器。如果它的事项,一旦视频播放器被放置在一个全屏幕视图,所述的UIApplication的keyWindow共享实例不是视频播放过程中的主应用程序窗口,而是替代MPFullScreenTransitionViewController的一个实例。

如果用户这全屏播放期间旋转的装置,然后结束播放,UISplitViewController不正确放置它的孩子。方法

splitViewController:willHideViewController:withBarButtonItem:forPopoverController: 

splitViewController:willShowViewController:invalidatingBarButtonItem: 
委托的

(在这种情况下,细节视图控制器)永远不会被调用。

如果在播放全屏视频时将设备旋转到横向,则关闭电影播放器​​会导致显示详细视图控制器,该视图控制器会保留其以前的栏按钮项,以便在弹出窗口中绘制主视图控制器虽然点击按钮不会产生任何动作)。在应绘制主视图控制器的情况下,只存在黑色区域。在细节视图控制器中向右滑动将滑出覆盖黑色区域的主视图控制器,但这仍然作为弹出窗口而不是持久视图存在。

如果在播放全屏视频时将设备旋转到纵向,则关闭电影播放器​​会导致显示详细视图控制器,该控制器缺少用于在弹出窗口中绘制主视图控制器的栏按钮项目。的详细视图控制器具有正确的宽度,并且主视图控制器是不可见的,所以详细视图的外观几乎是如预期除了缺少栏按钮项。

在两种情况下,不正确的视图后,手动旋转设备将出现适当的还原应用程序的功能。但是,依靠用户旋转(或双旋转)设备来解决绘图问题显然是不可接受的。

有一些方法,以保证当所有的孩子都消失模态电影播放器​​背后的拆分视图控制器意识到装置旋转的?

回答

2

答案建议用户SamuraiZack在苹果开发者论坛。在委托UISplitViewController,迫使拆分视图控制器的重新布局在viewWillAppear中:

[self.splitViewController.view setNeedsLayout]; 
[self.splitViewController.view layoutIfNeeded]; 

原始响应可以在Apple Developer forums观看。