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

Posted

技术标签:

【中文标题】隐藏状态栏时,我的导航栏在 iOS7 中向上移动【英文标题】:When hiding the statusbar my navigation bar moves up in iOS7 【发布时间】:2013-10-08 20:59:19 【问题描述】:

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

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

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

【问题讨论】:

UINavigationBarUIView 的子类。将其框架设置为您想要的任何内容。如果您使用的是设置其框架的UINavigationController,请将其子类化并覆盖viewWillLayoutSubviews 全面调查:***.com/questions/21929220/… 查看此参考链接customize-navigation-status-bar-ios-7 一些屏幕截图可以帮助您了解什么,更重要的是为什么要这样做。 你能发一张快照吗? 【参考方案1】:

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

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

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

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

【讨论】:

customView 高度应该是self.view.frame.size.height - 20 :) 赏金是自动授予的,但答案大多是正确的。我通过手动添加到我的视图中的替换 UINavigationView 类解决了我的问题,而我的控制器的真正导航栏保持隐藏状态。虽然我确实使用基于视图控制器的状态栏外观 plist 项并覆盖 prefersStatusBarHidden【参考方案2】:

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

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])

    self.edgesForExtendedLayout = UIRectEdgeNone;

【讨论】:

这并不能解决问题,因为我不想丢失扩展布局。【参考方案3】:

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

我不想提供其他答案或复制/过去,因此您应该仔细查看以下问题\答案。 :)

iOS 7 Status Bar Collides With NavigationBariOS 7 UIToolBar Overriding With Status Barstatusbar overlapping content in iOS7

【讨论】:

你好,我正在使用 TLYShyNavBar 和 carbonkit 来隐藏类似 youtube 主页的导航栏,你对此有什么想法吗?【参考方案4】:

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

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

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

【讨论】:

【参考方案5】:

这里的另一种解决方法:子类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

【讨论】:

这个方法在ios11上坏了

以上是关于隐藏状态栏时,我的导航栏在 iOS7 中向上移动的主要内容,如果未能解决你的问题,请参考以下文章

隐藏导航栏时UIButton向上移动

iOS:使状态栏在非 iphoneX 上隐藏时保持其高度

隐藏导航栏会导致视图向上移动

为啥我的导航栏在向下滚动时不隐藏而在向上滚动时出现?

iOS 7隐藏导航栏时如何更改状态栏的颜色?

在 iOS 7 中使用 Tint Color 显示导航栏时白色状态栏消失