【问题标题】:UISplitViewController does not recognize device rotation when covered by modal movie player被模态电影播放器​​覆盖时,UISplitViewController 无法识别设备旋转
【发布时间】:2013-05-16 08:58:29
【问题描述】:

[这个帖子发在Apple Developer Forums上,还没有人回复,我这里试试。]

我的应用程序将 UISplitViewController 用于 iPad 主/详细视图并在 iOS 6 上运行。拆分视图控制器是其窗口的根视图控制器。详细视图主要由嵌入在 UINavigationController 中的 UIWebView 组成。详细视图中唯一的其他元素是导航控制器提供的工具栏和导航栏。当 Web 视图显示嵌入了 YouTube 视频的页面时,用户可以使视频全屏显示。这一切都是由 UIWebView 完成的——我不负责创建全屏视频播放器。万一重要的是,一旦将视频播放器放置在全屏视图中,UIApplication 共享实例的 keyWindow 就不是视频播放期间的主应用程序窗口,而是 MPFullScreenTransitionViewController 的一个实例。

如果用户在全屏播放期间旋转设备,然后结束播放,则 UISplitViewController 不会正确放置其子项。方法

splitViewController:willHideViewController:withBarButtonItem:forPopoverController:

splitViewController:willShowViewController:invalidatingBarButtonItem:

委托(在本例中为细节视图控制器)永远不会被调用。

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

如果在播放全屏视频时将设备旋转到纵向,关闭电影播放器​​会导致显示细节视图控制器,该控制器缺少用于在弹出窗口中绘制主视图控制器的条形按钮项目。详细视图控制器具有正确的宽度,而主视图控制器不可见,因此详细视图的外观几乎与预期一样,只是缺少条形按钮项。

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

当所有子视图都消失在模态电影播放器​​后面时,是否有某种方法可以确保拆分视图控制器能够感知设备旋转?

【问题讨论】:

    标签: ios6 uiwebview rotation uisplitviewcontroller


    【解决方案1】:

    用户 SamuraiZack 在 Apple 开发者论坛上提出了答案。在 UISplitViewController 的委托中,在 viewWillAppear 中强制重新布局拆分视图控制器:

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

    原始回复可以在Apple Developer forums查看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多