33

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

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

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

4

5 回答 5

3

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

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

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

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

于 2014-06-02T09:21:02.817 回答
2

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

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
{
    self.edgesForExtendedLayout = UIRectEdgeNone;
}
于 2013-10-04T10:06:14.347 回答
1

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

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

iOS 7 状态栏与 NavigationBar
冲突 iOS 7 UIToolBar 覆盖与状态栏
状态栏在 iOS7 中重叠内容

于 2014-06-05T06:37:08.380 回答
1

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

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

当时它对我有用。试试看。

于 2014-05-30T07:42:51.530 回答
0

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

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

其中 setframeMinYframe.origin.ysetframeHeight被设置frame.size.height

于 2017-08-30T12:47:06.967 回答