iOS 5:你可以在特定的类中覆盖UIAppearance定制吗?

我正在build立一个应用程序与许多视图控制器:我有一个UITabBarController持有4 UINavigationController 。 我希望所有的导航栏都是我自定义的颜色,比如蓝色,我通过在应用程序代理中这样做来实现:

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

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

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

但没有任何反应。 可以做到这一点,或者我必须放弃UIAppearance,并为每个视图控制器手动设置navigationBar上的属性?

你这样做的方式应该是可行的,但事实并非如此。 这确实工作,虽然:

 [[UINavigationBar appearanceWhenContainedIn:[YourOtherVC class], nil] setTintColor:[UIColor blackColor]]; 

移动你的改变viewWillAppear:而不是viewDidLoad:它应该工作。

为此你会做:

 id specialNavBarAppearance = [UINavigationBar appearanceWhenContainedIn:[SpecialViewController class], nil]; [specialNavBarAppearance setBarStyle:UIBarStyleBlack]; [specialNavBarAppearance setTranslucent:YES];