我试图隐藏状态栏但保持“更大”的导航栏高度。现在,当我通过将- (BOOL)prefersStatusBarHidden
设置为YES
然后调用[self setNeedsStatusBarAppearanceUpdate];
来隐藏状态栏时。这样做的问题是导航栏会向上滑动,不会为我试图显示的通知留出空间。只是在状态栏上添加视图不是一个选项,我们的状态栏/导航具有花哨的模糊效果。有没有人知道如何使用状态栏高度维护标准导航栏高度并从中删除状态栏?
编辑;我最终做的是冒险并通过私有API获取状态栏的UIWindow并抵消它。
编辑2;应用程序已获得私有API批准。但要小心!
答案 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;
}
}
设置frameMinY
集frame.origin.y
并设置frameHeight
设为frame.size.height