退出电影播放器​​全屏会导致 navigationController 导航栏移到状态栏后面

Posted

技术标签:

【中文标题】退出电影播放器​​全屏会导致 navigationController 导航栏移到状态栏后面【英文标题】:Going out of movie player fullscreen causes the navigationController's navigationBar to move behind status bar 【发布时间】:2011-07-08 11:39:47 【问题描述】:

我在 ViewController 上添加了一个 MPMoviePlayerController 视图作为子视图。

我正在使用 layoutSubviews 在方向更改期间调整子视图的大小。

当我全屏播放电影,并在全屏时旋转手机,有时当我退出全屏时,我的导航栏“隐藏”在状态栏的一半下方,好像两者的起源相同状态栏在顶部。

我想知道我是不是做错了什么...有人可以帮忙吗?

谢谢!

【问题讨论】:

【参考方案1】:

不要更改导航栏的框架,从 Apple 的文档中读取如下:

导航控制器管理创建、配置和 显示导航栏和可选的导航工具栏。它是 允许自定义导航栏的外观相关 属性,但绝不能更改其框架、边界或 alpha 直接取值。如果你继承 UINavigationBar,你必须初始化 您的导航控制器使用 initWithNavigationBarClass:toolbarClass: 方法。隐藏或显示 导航栏,使用 navigationBarHidden 属性或 setNavigationBarHidden:animated: 方法

https://developer.apple.com/library/ios/documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

现在我这样做了,效果很好: 1)在您的视图控制器的入口点将您自己作为观察者添加到电影播放器​​状态

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playerChangedState) name:@"UIMoviePlayerControllerWillExitFullscreenNotification" object:nil];

2) 响应通知:

// run this method on the main thread
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
    [self.navigationController setNavigationBarHidden:YES];
    [self.navigationController setNavigationBarHidden:NO animated:YES];

注意:此代码适用于 iOS 7,我尚未针对旧版本的 iOS 进行测试。

【讨论】:

【参考方案2】:

对于任何寻找答案的人,我通过将 navigationController.navigationBar 框架的原点重置为 0,20 来修复它,如下所示:

self.navigationController.navigationBar.frame = CGRectMake(0, 20, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height);

【讨论】:

【参考方案3】:

我遇到了类似的问题,接受的解决方案对我没有帮助 - 帮助的是这篇帖子的答案:Disappearing status bar at the top after MPMoviePlayerController is closed

基本上不得不添加延迟调用来设置 [UIApplication sharedApplication].statusBarHidden = NO;

(张贴在这里只是为了防止其他人有这个问题)

【讨论】:

以上是关于退出电影播放器​​全屏会导致 navigationController 导航栏移到状态栏后面的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayerViewController 播放后退出全屏

我想问有没有播放器,看电影全屏时,能显示时间。显示播放多长时间,还有多长时间!

MPMoviePlayerController 不能全屏播放电影

如何在全屏模式下开始电影或在横向播放时重新调整播放器宽度?

当用户尝试全屏播放时,MPMoviePlayerController 停止并重置电影 [iOS]

iPad SDK:嵌入式 YouTube 电影在 UIWebView 后面播放全屏版本