隐藏状态栏时,我的导航栏在iOS7中向上移动

我试图隐藏状态栏,但保持“较大”的导航栏高度。 现在当我隐藏状态栏时,通过设置- (BOOL)prefersStatusBarHiddenYES ,然后调用[self setNeedsStatusBarAppearanceUpdate]; 。 这个问题是,导航栏将滑动,并不会留下我试图显示的通知的空间。 简单地添加视图到状态栏不是一个选项,我们的状态栏/导航具有迷幻效果。 有没有人有线索如何保持与状态栏高度的标准导航栏高度,并从中删除状态栏?

编辑; 我最终做的是冒险,并通过私有API获取状态栏的UIWindow,并抵消这一点。

编辑2; 应用获得了私有API的批准。 尽pipe谨慎!

你可以创build一个自定义的UIView框架

 customView.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height); 

也按照以下步骤隐藏您的状态栏

转到info.plist并添加两个属性(如果不存在)。 将“状态栏最初隐藏”设置为YES ,并将UIViewControllerBasedStatusBarAppearance设置为NO 这将隐藏您的应用程序的状态栏。

在您的视图中添加此代码控制器:

 if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) { self.edgesForExtendedLayout = UIRectEdgeNone; } 

你应该使用UIBarPositioningDelegate Protocol.positionForBar:方法UIBarPositioningDelegate Protocol.

我不想把另一个答案或复制/过去,所以你应该仔细看看下面的问题\答案。 🙂

iOS 7状态栏与NavigationBar碰撞
iOS 7的UIToolBar覆盖状态栏
状态栏在iOS7中重叠内容

我不得不这样做一次。 我最终创build了自己的自定义导航栏,然后将帧设置为:

 navBar.frame=CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height); 

它在当时为我工作。 试试吧。

另一个解决方法在这里:子类UINavigationController覆盖方法:

 - (void)viewWillLayoutSubviews { [super viewWillLayoutSubviews]; if (self.navigationBar.frameMinY < 1) { self.navigationBar.frameHeight = 64; } else { self.navigationBar.frameHeight = 44; } } 

其中设置frameMinY设置frame.origin.y和设置frameHeight设置frame.size.height