3

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

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

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

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

谢谢!

4

3 回答 3

6

不要更改您的导航栏的框架,从 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 对其进行测试。

于 2014-01-15T09:16:43.220 回答
3

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

self.navigationController.navigationBar.frame = CGRectMake(0, 20, self.navigationController.navigationBar.frame.size.width, self.navigationController.navigationBar.frame.size.height);
于 2011-03-07T18:25:47.457 回答
2

我有一个类似的问题,接受的解决方案对我没有帮助 - 帮助的是这篇文章的答案:MPMoviePlayerController is closed after Disappearing status bar at the top after MPMoviePlayerController is closed

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

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

于 2011-09-12T02:01:38.930 回答