我正在构建一个包含许多视图控制器的应用:我有一个UITabBarController
,其中包含4个UINavigationController
。我希望所有的导航栏都是我的自定义颜色,比如蓝色,我通过在我的应用代表中实现这一点:
[[UINavigationBar appearance] setTintColor:[UIColor blueColor]];
但我也有一个特殊的视图控制器,它有一个地图,对于这个视图控制器,我想用UIAppearance
覆盖蓝色导航栏设置,使其成为黑色不透明风格。我试过在viewDidLoad
内调用它:
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
self.navigationController.navigationBar.translucent = YES;
但没有任何反应。可以这样做还是我必须放弃UIAppearance并为每个视图控制器手动设置navigationBar
的属性?
答案 0 :(得分:28)
你做这件事的方式应该有效,但事实并非如此。这确实有效:
UINavigationBar.appearance(whenContainedInInstancesOf: [YourOtherVC.self]).tintColor = .black
[[UINavigationBar appearanceWhenContainedIn:[YourOtherVC class], nil] setTintColor:[UIColor blackColor]];
答案 1 :(得分:9)
将您的更改移至viewWillAppear:而不是viewDidLoad:它应该可以正常工作。
答案 2 :(得分:1)
为此你会这样做:
id specialNavBarAppearance = [UINavigationBar appearanceWhenContainedIn:[SpecialViewController class], nil];
[specialNavBarAppearance setBarStyle:UIBarStyleBlack];
[specialNavBarAppearance setTranslucent:YES];