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

时间:2013-10-02 13:02:21

标签: ios ios7 uinavigationbar uistatusbar

我试图隐藏状态栏但保持“更大”的导航栏高度。现在,当我通过将- (BOOL)prefersStatusBarHidden设置为YES然后调用[self setNeedsStatusBarAppearanceUpdate];来隐藏状态栏时。这样做的问题是导航栏会向上滑动,不会为我试图显示的通知留出空间。只是在状态栏上添加视图不是一个选项,我们的状态栏/导航具有花哨的模糊效果。有没有人知道如何使用状态栏高度维护标准导航栏高度并从中删除状态栏?

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

编辑2;应用程序已获得私有API批准。但要小心!

5 个答案:

答案 0 :(得分:3)

您可以创建一个自定义UIView,其框架为

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

还可以按照以下步骤隐藏状态栏

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

我必须这样做一次。我最终创建了自己的自定义导航栏,然后将框架设置为:

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

当时对我有用。试试吧。

答案 3 :(得分:1)

您应该使用positionForBar: method of UIBarPositioningDelegate Protocol.

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

iOS 7 Status Bar Collides With NavigationBar
iOS 7 UIToolBar Overriding With Status Bar
statusbar overlapping content in iOS7

答案 4 :(得分:0)

此处有另一种解决方法:子类UINavigationController覆盖方法:

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

设置frameMinYframe.origin.y并设置frameHeight设为frame.size.height