【问题标题】:MPMoviePlayerViewController Status bar issue iOS 8 specificMPMoviePlayerViewController 状态栏问题 iOS 8 特定
【发布时间】:2014-10-02 18:18:34
【问题描述】:

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

为了在我的应用中显示视频,我使用了 XCDYouTubeKit,它是 MPMoviePlayerViewController 上的轻量级包装器。

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

您可以在此处下载演示项目。

https://www.dropbox.com/s/yp5pkvf9evsl8wb/XCDYouTubeKit%20Demo.zip?dl=0

要体验这个东西你需要在 XCDYouTubeKit 演示中按照以下步骤操作:

  1. 在 info.plist 文件中设置“查看基于控制器的状态栏外观” 改为“否”。
  2. 在 iOS 8 中打开应用并转到“全屏播放器”。
  3. 将方向从纵向更改为横向,反之亦然。您会观察到状态栏隐藏在横向而不是纵向。
  4. 现在点击“播放全屏”按钮(纵向模式),让视图控制器出现。
  5. 按“完成”按钮关闭视频(与方向无关)。
  6. 将方向从纵向更改为横向,反之亦然。无论设备方向如何,您都会观察到状态栏始终保持在那里。

请帮忙!!!

【问题讨论】:

    标签: iphone ios8 orientation mpmovieplayercontroller statusbar


    【解决方案1】:

    请注意,Harsh,您可以(有争议!)只需为此使用一个类别!

    仅一次适用于整个应用。我们在大批量生产应用程序(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
    

    3) 在您的 plist 中不要将“状态栏最初隐藏”设置为“是”。

    4)不要改变 UIViewControllerBasedStatusBarAppearance。

    扩展discussion。

    【讨论】:

      【解决方案2】:

      我找不到原始问题的解决方案。但我设法实现了最终目标,即状态栏停止以横向显示(iOS 8 && iPhone)。

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

        -(UIStatusBarStyle)preferredStatusBarStyle {
          return UIStatusBarStyleLightContent;
         }
        

      对于那些包含在UINavigationController 中的视图控制器,我参考了以下问题:

      preferredStatusBarStyle isn't called

      【讨论】:

      • 谢谢@JoeBlow 我完全同意你的评论。它的高效。请将其发布为答案。我会选择它。
      猜你喜欢
      • 2023-04-03
      • 2011-11-24
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多