我在 ViewController 上添加了一个 MPMoviePlayerController 视图作为子视图。
我正在使用 layoutSubviews 在方向更改期间调整子视图的大小。
当我全屏播放电影,并在全屏时旋转手机,有时当我退出全屏时,我的导航栏“隐藏”在状态栏的一半下方,好像两者的起源与状态相同顶部的酒吧。
我想知道我是否做错了什么......有人可以帮忙吗?
谢谢!
我在 ViewController 上添加了一个 MPMoviePlayerController 视图作为子视图。
我正在使用 layoutSubviews 在方向更改期间调整子视图的大小。
当我全屏播放电影,并在全屏时旋转手机,有时当我退出全屏时,我的导航栏“隐藏”在状态栏的一半下方,好像两者的起源与状态相同顶部的酒吧。
我想知道我是否做错了什么......有人可以帮忙吗?
谢谢!
不要更改您的导航栏的框架,从 Apple 的文档中读取如下:
导航控制器管理导航栏和可选导航工具栏的创建、配置和显示。允许自定义导航栏与外观相关的属性,但绝不能直接更改其框架、边界或 alpha 值。如果子类化 UINavigationBar,则必须使用 initWithNavigationBarClass:toolbarClass: 方法初始化导航控制器。要隐藏或显示导航栏,请使用 navigationBarHidden 属性或 setNavigationBarHidden:animated: 方法
现在我这样做并且效果很好:
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 对其进行测试。
对于任何寻找答案的人,我通过将 navigationController.navigationBar 框架的原点重置为 0,20 来修复它,如下所示:
self.navigationController.navigationBar.frame = CGRectMake(0, 20, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height);
我有一个类似的问题,接受的解决方案对我没有帮助 - 帮助的是这篇文章的答案:MPMoviePlayerController is closed after Disappearing status bar at the top after MPMoviePlayerController is closed
基本上必须添加延迟调用来设置 [UIApplication sharedApplication].statusBarHidden = NO;
(张贴在这里只是以防其他人有这个问题)