当导航栏隐藏时,伪造状态栏颜色

8
我遇到了与状态栏和导航栏相关的问题。默认情况下,UINavigationController 的导航栏会延伸到状态栏后面并着色它(左侧截图)。
当使用搜索栏时,我隐藏导航栏。这将导致状态栏未被着色。苹果的邮件应用程序没有此问题。
除了创建一个带有背景颜色的单独的 UIView 并将其放置在状态栏后面之外,是否还有其他解决方案?
这是我想要实现的效果:

1
研究 UIBarPositioningDelegate - Desdenova
感谢@Desdenova的建议,我找到了https://dev59.com/FHfZa4cB1Zd3GeqPMgh4#18897105,解决了我的问题,也很可能解决了你的问题。 - joels
2个回答

0
当您隐藏navigationBar时,为什么不更新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];

0
在您的 IB 中(或以编程方式),尝试检查顶部栏的模拟度量:应将其从不透明设置为半透明(导航栏)。
注:默认情况下,导航栏是半透明的。您应该免费获得“彩色”状态栏。
**如 UISearchBar.appearance().barTintColor 所定义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接