MPMoviePlayerViewController状态栏特定于iOS 8

时间:2014-10-02 18:18:35

标签: iphone ios8 orientation mpmovieplayercontroller statusbar

注意:在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. 将“方向”更改为“纵向”更改为横向,反之亦然。无论设备方向如何,您都会发现状态栏始终保持在那里。
  7. 请帮助!!!

2 个答案:

答案 0 :(得分:2)

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

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

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

    preferredStatusBarStyle isn't called

答案 1 :(得分:2)

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

仅适用于整个应用。我们在大批量生产应用程序(在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中将“状态栏最初隐藏”设置为“YES”。

4)改变UIViewControllerBasedStatusBarAppearance。

延长discussion