iOS 5:您可以覆盖特定类中的UIAppearance自定义吗?

时间:2011-12-10 20:58:16

标签: objective-c ios xcode4 ios5

我正在构建一个包含许多视图控制器的应用:我有一个UITabBarController,其中包含4个UINavigationController。我希望所有的导航栏都是我的自定义颜色,比如蓝色,我通过在我的应用代表中实现这一点:

[[UINavigationBar appearance] setTintColor:[UIColor blueColor]];

但我也有一个特殊的视图控制器,它有一个地图,对于这个视图控制器,我想用UIAppearance覆盖蓝色导航栏设置,使其成为黑色不透明风格。我试过在viewDidLoad内调用它:

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
self.navigationController.navigationBar.translucent = YES;

但没有任何反应。可以这样做还是我必须放弃UIAppearance并为每个视图控制器手动设置navigationBar的属性?

3 个答案:

答案 0 :(得分:28)

你做这件事的方式应该有效,但事实并非如此。这确实有效:

Swift 4

UINavigationBar.appearance(whenContainedInInstancesOf: [YourOtherVC.self]).tintColor = .black

的Objective-C

[[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];