带导航栏的 TabBarController 上的彩色状态栏不起作用

Coloured Status Bar on a TabBarController with NavigationBar not working

我在这里阅读了很多帖子并尝试了提到的大部分选项,但 none 为我解决了这个问题。我有一个基于选项卡栏控制器的应用程序。每个选项卡都是一个顶部带有导航栏的 UIViewController。

将此代码添加到 AppDelegate 后,我得到了一个带有白色文本的橙色导航栏,以及一个带有黑色文本的白色状态栏。

[[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]];
[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];

阅读各个页面上的答案建议将以下内容添加到视图控制器中:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

然后在 View Did Load 中调用它:

[self setNeedsStatusBarAppearanceUpdate];

这让我得到了一个带有白色文本的白色状态栏,现在我怎样才能让状态栏变成橙色以匹配我的导航栏??

这里 上提到的解决方案对那些使用导航控制器的人不起作用,我想那是因为我的主控制器是一个标签栏控制器。

有人遇到过这个吗?提前感谢您提出的任何意见/建议。如果需要,我可以提供一个示例应用程序,但使用选项卡栏模板构建一个应用程序可能同样快速,添加一个导航栏,然后粘贴到我的代码示例中。

等离子

自从 IOS7 以来,我遇到了几乎相同的问题,但我的快速解决方案是从第一个视图更改所有视图,我指的是在 [=15= 中设置颜色条配置]AppDelegate.m 文件,我建议使用这个免费框架 Nab Bar Color And Gradient 非常易于使用,而且您可以在所有视图上设置漂亮的渐变。

查看项目中的示例。

您可以通过名称找到状态栏 UIVIew 并对其进行着色。将此方法添加到您的 AppDelegate.m 并从 didFinishLaunchingWithOptions:

调用它
- (void)setStatusBarBackgroundColor:(UIColor *)color {

    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = color;
    }
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

 ...   

    [self setStatusBarBackgroundColor:[UIColor orangeColor]];

 ...

}

注意:商店中有使用此方法的应用程序。所以苹果HIG政策没问题

通常,您不应将 UINavigationBar 添加到 UIViewController。相反,填写你的 UITabBarController will UINavigationControllers.

    let firstViewController = FirstViewController(nibName: nil, bundle: nil)
    let firstNavigationController = UINavigationController(rootViewController: firstViewController)

    let secondViewController = SecondViewController(nibName: nil, bundle: nil)
    let secondNavigationController = UINavigationController(rootViewController: secondViewController)

    let navigationControllers = [
        firstNavigationController,
        secondNavigationController
    ]

    yourTabBarController.setViewControllers(navigationControllers, animated: false)

如果您使用的是故事板,则同样的一般过程适用。

是的,所以 BSmith11 关于将导航控制器添加到选项卡栏的观点让我开始思考。所以我在这个页面上做了一些谷歌搜索和答案,帮助很大:Tab bar controller inside a uinavigationcontroller

通过将 TabBar 控制器作为根ViewController,然后在它和普通 ViewController 之间插入一个 "NavigationController" 允许我这样做:

    //Fix up the Navigation bar tint and set text colours to white
[[UINavigationBar appearance] setBarTintColor:[UIColor orangeColor]];
[[UINavigationBar appearance] setBackgroundColor:[UIColor orangeColor]];

[[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];
[[UINavigationBar appearance] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];

//Also requires setting 'View controller-based status bar appearance' to NO in .plist
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

这正是我之前所拥有的,它为我提供了一个彩色的 StatusBar 和完全相同颜色的 NavBar。现在看看我是否可以将它添加到现有应用程序中而不破坏所有内容。

等离子