iOS 5: Можете ли вы переопределить настройки UIAppearance в определенных классах? - PullRequest
15 голосов
/ 11 декабря 2011

Я создаю приложение со многими контроллерами представления: у меня есть UITabBarController, который содержит 4 UINavigationController.Я хочу, чтобы все навигационные панели были моего собственного цвета, скажем, синего, чего я добиваюсь, выполняя это в моем делегате приложения:

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

Но у меня также есть один специальный контроллер вида, у которого есть карта, и дляв этом контроллере представления я хочу переопределить синий набор навигационных панелей, используя UIAppearance, чтобы сделать его черным непрозрачным стилемЯ пытался позвонить это внутри viewDidLoad:

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

Но ничего не происходит.Можно ли это сделать или мне нужно отказаться от UIAppearance и установить свойства на navigationBar вручную для каждого контроллера представления?

Ответы [ 3 ]

28 голосов
/ 11 декабря 2011

То, как вы это делаете, должно работать, но это не так. Это работает, хотя:

Swift 4

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

Objective-C

[[UINavigationBar appearanceWhenContainedIn:[YourOtherVC class], nil] setTintColor:[UIColor blackColor]];
9 голосов
/ 15 января 2013

Переместите ваши изменения в viewWillAppear: вместо viewDidLoad: и оно должно работать.

1 голос
/ 11 декабря 2011

Для этого вы бы сделали:

id specialNavBarAppearance = [UINavigationBar appearanceWhenContainedIn:[SpecialViewController class], nil];

[specialNavBarAppearance setBarStyle:UIBarStyleBlack];
[specialNavBarAppearance setTranslucent:YES];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...