Iphone MPMoviePlayerViewController状态栏问题特定于iOS 8

Iphone MPMoviePlayerViewController状态栏问题特定于iOS 8,iphone,ios8,orientation,mpmovieplayercontroller,statusbar,Iphone,Ios8,Orientation,Mpmovieplayercontroller,Statusbar,注意:在iOS 8中,状态栏自动隐藏在横向中,并以纵向显示(仅限iPhone) 为了在我的应用程序中显示视频,我使用了XCDYouTubeKit,它是MPMoviePlayerViewController上的一个轻型包装器 由于某些功能,我不得不在info.plist文件中将“基于视图控制器的状态栏外观”设置为“否”。在你不使用XCDYouTubeKit(MPMoviePlayerViewController)之前,该应用程序工作正常。使用XCDYouTubeKit后,应用程序将失去上面“注意”

注意:在iOS 8中,状态栏自动隐藏在横向中,并以纵向显示(仅限iPhone)

为了在我的应用程序中显示视频,我使用了XCDYouTubeKit,它是MPMoviePlayerViewController上的一个轻型包装器

由于某些功能,我不得不在info.plist文件中将“基于视图控制器的状态栏外观”设置为“否”。在你不使用XCDYouTubeKit(MPMoviePlayerViewController)之前,该应用程序工作正常。使用XCDYouTubeKit后,应用程序将失去上面“注意”中指定的功能,这意味着状态栏也将开始显示在横向视图中

您可以在这里下载演示项目

要体验这一点,您需要在XCDYouTubeKit演示中遵循以下步骤:

  • 在info.plist文件中设置“基于视图控制器的状态栏外观” “不”
  • 在iOS 8中打开应用程序并转到“全屏播放器”
  • 将方向更改为纵向或横向。您将看到状态栏隐藏在横向中,而不是纵向中
  • 现在点击“全屏播放”按钮(纵向模式),让视图控制器出现
  • 按“完成”按钮(无论方向如何)关闭视频
  • 将方向更改为纵向或横向。您将看到,无论设备方向如何,状态栏始终保持在那里

  • 请帮忙

    我找不到原始问题的解决方案。但我成功地实现了最终目标,即状态栏不再在(iOS 8和iPhone)中显示

  • 我将“基于视图控制器的状态栏外观”设置为“否”,因为我必须在整个应用程序中设置状态样式
  • 但由于将“基于视图控制器的状态栏外观”设置为“否”是导致主要问题的原因,我将其删除,这导致应用程序中的状态栏变黑,但解决了主要问题
  • 然后,我必须在所有独立视图控制器中添加以下代码:

    -(UIStatusBarStyle)preferredStatusBarStyle {
      return UIStatusBarStyleLightContent;
     }
    
  • 对于
    UINavigationController
    中包含的视图控制器,我参考了以下问题:

    也请注意,苛刻的是,你可以(有争议的!)只需使用一个类别即可

    仅对整个应用程序执行一次。我们每次都在大批量生产应用程序中(在objective-c时代)毫无问题地完成他的工作,我经常在大批量客户端项目中看到。。。所以

    1) 创建一个名为UIViewController+HideStatusBar的类别

    @interface UIViewController (HideStatusBar)
    @end
    // the only practical approach for no-statusbar in iOS7,8+
    @implementation UIViewController (HideStatusBar)
    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
    -(BOOL)prefersStatusBarHidden {return YES;}
    -(UIViewController *)childViewControllerForStatusBarHidden {return nil;}
    #pragma clang diagnostic pop
    @end
    
    2) 在你的plist中添加

    <key>UIStatusBarHidden~ipad</key>
    <true/>
    // that is needed if you're covering iPad; do it always for consistency
    
    UIStatusBarHidden~ipad
    //如果你在报道iPad,这是必要的;始终保持一致性
    
    3) 不要在plist中将“状态栏最初隐藏”设置为“是”

    4) 不要改变UIViewControllerBasedStatusBarAppearance


    延长。

    谢谢@JoeBlow我完全同意你的评论。它的效率很高。请把它作为答案贴出来。我会选择它。