隐藏导航栏时的假状态栏颜色

Posted

技术标签:

【中文标题】隐藏导航栏时的假状态栏颜色【英文标题】:Fake Status Bar Color when Navigation Bar is hidden 【发布时间】:2015-03-10 18:45:08 【问题描述】:

我遇到了状态栏和导航栏的问题。默认情况下,UINavigationController 的导航栏延伸到状态栏的后面并为其着色(左截图)。

当使用搜索栏时,我隐藏了导航栏。这会产生一个未着色的状态栏。 Apple 的邮件应用没有这个问题。

除了创建一个带有背景色的单独 UIView 并将其放在状态栏后面之外,还有其他解决方案吗?

这是我想要完成的:

【问题讨论】:

研究UIBarPositioningDelegate 感谢@Desdenova 的建议,我找到了***.com/a/18897105/3512120,它解决了我的问题,也可能解决了你的问题。 【参考方案1】:

当您隐藏导航栏时,为什么不更新您的 UIStatusBar 的外观。

在您的 NavigationController 中实现此功能:

-(UIStatusBarStyle)preferredStatusBarStyle
    //Have an if statement to determine which UIStatusBarStyle to return, i.e if the navigationBar is hidden 
    return UIStatusBarStyleLightContent; 
 

当你隐藏你的导航栏时调用它:

 [self setNeedsStatusBarAppearanceUpdate];

另一种选择是执行以下操作:

在您的 info pList 文件中将 UIViewControllerBasedStatusBarAppearance 设置为 NO。 然后就可以调用了

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

【讨论】:

【参考方案2】:

在您的 IB(或以编程方式)中,尝试检查顶部栏的模拟指标:您应该将其从不透明设置为半透明(导航栏)。

注意:默认情况下,导航栏是半透明的。你应该得到 free 的“彩色”** 状态栏。

** 由UISearchBar.appearance().barTintColor 定义

【讨论】:

以上是关于隐藏导航栏时的假状态栏颜色的主要内容,如果未能解决你的问题,请参考以下文章

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

隐藏导航栏时隐藏状态栏 - SWIFT iOS8

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

iOS hidesBarsOnSwipe 状态栏背景颜色

当隐藏状态栏时,有没有办法防止布局“跳跃”?

在iOS 7中隐藏状态栏时防止UINavigationController调整原点