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

Posted

技术标签:

【中文标题】在 iOS 7 中使用 Tint Color 显示导航栏时白色状态栏消失【英文标题】:White status bar disappears when Navigation bar is visible with Tint Color in iOS 7 【发布时间】:2013-10-13 14:27:16 【问题描述】:

我有 2 个UIViewControllers。在第一个UIViewController 中,比如ViewController1,我将UINavigationBar 隐藏起来。由于我的应用程序的主题是黑色,所以我需要在ios 7 中使用白色UIStatusBar,这样它就不会在黑色UINavigationBar 中变得不可见。为了变白UIStatusBar,我在iOS 7使用这个方法。

    plist中的UIViewControllerBasedStatusBarAppearance设置为YESviewDidLoad 做一个[self setNeedsStatusBarAppearanceUpdate];

    添加如下方法:

    -(UIStatusBarStyle)preferredStatusBarStyle 
      return UIStatusBarStyleLightContent; 
     
    

当我在 ViewController1 时它工作正常。但是当我移动到 ViewController2 时,如果我设置了

self.navigationController.navigationBarHidden = NO 

在我的viewDidLoad 方法中。然后上面的白色UIStatusBar 代码不起作用。 UIStatusBar 变黑了我看不到,因为我正在使用以下代码自定义我的UINavigationBar

self.navigationController.navigationBar.barTintColor = [UIColor blackColor];
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];
self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor whiteColor] forKey:UITextAttributeTextColor];
self.navigationController.navigationBar.translucent = NO; 

如果我像 ViewController1 一样将UINavigationBar 隐藏起来,那么白色的UIStatusBar 将再次可见。但是当UINavigationBar 可见时,状态栏会再次变黑。这就是问题所在。

任何人都可以在这种情况下帮助我,我怎样才能获得像我的 ViewController1 这样的白色状态栏? 提前致谢。

【问题讨论】:

This answer 可能会有所帮助。 【参考方案1】:

您是否尝试将其添加到两个视图控制器中

-(UIStatusBarStyle)preferredStatusBarStyle 
    return UIStatusBarStyleLightContent; 

【讨论】:

【参考方案2】:

您可能只是缺少 plist 上所需的属性:查看基于控制器的状态栏外观为 NO。

编辑:查看@caglar 对先前答案的评论,以获得对一般需求的更全面的答案。

【讨论】:

以上是关于在 iOS 7 中使用 Tint Color 显示导航栏时白色状态栏消失的主要内容,如果未能解决你的问题,请参考以下文章

详解 UIView 的 Tint Color 属性

如何禁用 UIButton Tint Color?

IOS 7.1 中的 UISegmentedControl Buggy Tint 颜色

详解 UIView 的 Tint Color 属性

将 NavigationBar Tint/Color 更改为 Navigation Stack 中每个 ViewController 的不同值

更改全局色调颜色 - iOS 7/iOS 8