iOS 13 - 导航栏标题颜色问题
Posted
技术标签:
【中文标题】iOS 13 - 导航栏标题颜色问题【英文标题】:iOS13 - problem with navigationBar title color 【发布时间】:2019-08-22 13:26:08 【问题描述】:我有一个带有多个 viewController 和一个 tabBarController 的故事板应用程序。到目前为止,navigationBar 的标题颜色为白色。现在我正在使用 Xcode 11 beta 6 和 ios 13 beta 8 进行测试,并且标题是黑色的。在装有 iOS 12 的设备上,标题仍然是白色的。 我试图在情节提要的导航控制器的导航栏中设置标题颜色。但这没有什么区别。 我也尝试在每个视图中更改标题颜色,但有时它不起作用。 在开始使用 iOS 13 进行测试时,我不得不更改我的代码以更改状态栏的背景颜色。代码是这样的:
self.tabBarController.title = NSLocalizedString(@"AppTitle",nil);
NSShadow *shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor clearColor];
shadow.shadowOffset = CGSizeMake(0, 1);
[self.navigationController.navigationBar setBarTintColor:COLOR_HEADER_LIGHT];
if (@available(iOS 13, *))
UINavigationBarAppearance *navBar = [[UINavigationBarAppearance alloc] init];
navBar.backgroundColor = COLOR_HEADER_LIGHT;
self.navigationController.navigationBar.standardAppearance = navBar;
self.navigationController.navigationBar.scrollEdgeAppearance = navBar;
else
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)])
statusBar.backgroundColor = COLOR_HEADER_LIGHT;
[self.navigationController.navigationBar setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
shadow, NSShadowAttributeName, FONT_MEDIUM_SIZE_18, NSFontAttributeName,
COLOR_TEXT_WHITE, NSForegroundColorAttributeName, nil]];
[self.navigationController.navigationBar setTintColor:COLOR_TEXT_WHITE];
我希望有人知道如何将标题颜色改回白色。无需调整每个控制器的最佳情况。
【问题讨论】:
COLOR_TEXT_WHITE 是如何定义的? #define COLOR_TEXT_WHITE [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0] 【参考方案1】:func manageNavigationBar()
if #available(iOS 13.0, *)
let navBarAppearance = UINavigationBarAppearance()
navBarAppearance.configureWithOpaqueBackground()
navBarAppearance.backgroundColor = UIColor(red: 0.6157, green: 0.3412, blue: 0.8588, alpha: 1.0)
navBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
navBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
UINavigationBar.appearance(whenContainedInInstancesOf: [UINavigationController.self]).standardAppearance = navBarAppearance
UINavigationBar.appearance(whenContainedInInstancesOf: [UINavigationController.self]).scrollEdgeAppearance = navBarAppearance
//在您的 AppDelegate 中调用此函数,也在您希望导航像这样工作的类中调用此函数
【讨论】:
这个问题的最佳答案。谢谢。【参考方案2】:在 iOS 13 中,我像这样更改标题颜色
UINavigationBarAppearance *appearance = [self.navigationController.navigationBar standardAppearance];
appearance.titleTextAttributes = @NSForegroundColorAttributeName: [UIColor whiteColor];
self.navigationController.navigationBar.standardAppearance = appearance;
self.navigationController.navigationBar.scrollEdgeAppearance = appearance;
【讨论】:
【参考方案3】:在 iOS13 中,您需要在 UINavigationBarAppearance 对象上设置标题颜色 - 尝试将此行添加到您的代码中:
appearance.titleTextAttributes = [.foregroundColor: myAppLabelColor]
appearance.largeTitleTextAttributes = [.foregroundColor: myAppLabelColor]
【讨论】:
【参考方案4】:iOS 13 为浅色和深色主题使用动态颜色,您可以通过为浅色和深色外观创建颜色资源来设置标题颜色。
【讨论】:
以上是关于iOS 13 - 导航栏标题颜色问题的主要内容,如果未能解决你的问题,请参考以下文章