在纵向锁定应用程序中为 MPMoviePlayerViewController 启用横向

Enable landscape for MPMoviePlayerViewController in a Portrait locked application

我正在使用 swift 开发一个 iOS 应用程序(仅限纵向)。我有一个视频部分,其中我提供了一个视频列表。当用户点击其中之一时,我使用 MPMoviePlayerViewController 来呈现电影播放器​​视图。

这是我的代码:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
     let videoId = videos.objectAtIndex(indexPath.row).objectForKey("id") as! String
     let videoPlayerViewController = XCDYouTubeVideoPlayerViewController.init(videoIdentifier: videoId)
     videoPlayerViewController.moviePlayer.scalingMode = .AspectFit
     videoPlayerViewController.moviePlayer.fullscreen = true
     videoPlayerViewController.moviePlayer.controlStyle = .Fullscreen
     videoPlayerViewController.moviePlayer.shouldAutoplay = true
     videoPlayerViewController.moviePlayer.prepareToPlay
     self.presentMoviePlayerViewControllerAnimated(videoPlayerViewController)
}

我按如下方式在我的 AppDelegate 上启用了旋转:

func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow?) -> UIInterfaceOrientationMask {
     //If the video is being presented, let the user change orientation, otherwise don't.
     if var presentedViewController = window?.rootViewController?.presentedViewController {
        // Get the controller on the top of the stack
        while (presentedViewController.presentedViewController) != nil {
              presentedViewController = presentedViewController.presentedViewController!
        }
        if (presentedViewController.isKindOfClass(MPMoviePlayerViewController) && !presentedViewController.isBeingDismissed()) {
              return UIInterfaceOrientationMask.All
        }else{
              return UIInterfaceOrientationMask.Portrait
        }
     }
     return UIInterfaceOrientationMask.Portrait
}

一切似乎都正常,但是当我从 MPMoviePlayerViewController 返回时,我的 tableview 乱七八糟如下:

我认为这个问题是由 AutoLayout 引起的,但我不知道如何解决它。希望有人帮忙。

发生这种情况是因为当您打开视频时,即使您呈现的视图控制器是纵向的,它也会旋转,并且布局会发生变化。

有几个解决方案:

  1. 关闭视频时可以强制竖屏
  2. 您可以在新的 UIWindow 中打开视频。这样在呈现视频时,呈现 UIViewController 根本不会改变。