带导航栏的 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 UINavigationController
s.
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。现在看看我是否可以将它添加到现有应用程序中而不破坏所有内容。
等离子
我在这里阅读了很多帖子并尝试了提到的大部分选项,但 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 UINavigationController
s.
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。现在看看我是否可以将它添加到现有应用程序中而不破坏所有内容。
等离子