在基于 UINavigationController 的应用程序中切换 UIStatusBar 颜色 (black/white)

Switch between UIStatusBar color (black/white) in UINavigationController based app

在我的应用程序中,我使用多种颜色(基于主题)作为 UINavigationBar 的色调,用于一些浅色和一些深色。在 iOS7 及更高版本中,也会更改状态栏颜色。

对于浅色,可以使用默认状态栏文本颜色(黑色),但对于深色,我们需要使用浅色(白色)。

我已经尝试了很多基于不同答案的方法来做到这一点。这些是:
1. View controller-based status bar appearance,但不适用于基于 UINavigationControler 的应用程序
2. Setting self.navigationController.navigationBar.barStyle = UIBarStyleBlack; 将状态栏文本颜色设置为白色,但设置为白色后颜色不会变回黑色

它将如何运作?

要更改特定页面的颜色,您需要在整个应用程序范围内进行更改。当然,您可以在离开此页面后重新更新。

- (void) viewWillAppear:(BOOL)animated{
    [super viewWillAppear:animated];

    // Do any additional setup after loading the view.
    if ([tintColor isEqual:[UIColor blackColor]])
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
    else
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
}

- (void) viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:YES];

    //set it back to default
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
}