退出电影播放器全屏会导致 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 不能全屏播放电影