UINavigationController изменяет цвет оттенка панели навигации глобально и программно - PullRequest
20 голосов
/ 24 февраля 2012

Этот код может изменить цвет UINavigationBar везде в приложении. Тем не менее, я заметил, что не меняет UIColor из UINavigationBar, используемого UINavigationController (мое происходит от UIStoryboard).

UIColor* navBarColor = [UIColor colorWithRed:arc4random()%100/100.0 
                                       green:arc4random()%100/100.0 
                                        blue:arc4random()%100/100.0 
                                       alpha:1];
[[UINavigationBar appearance] setTintColor:navBarColor];

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent];
[[UINavigationBar appearance] setAlpha:0.7];

Есть ли способ доступа к объекту appearance на панели навигации UINavigationController's? Я знаю, как устанавливать оттенки отдельных контроллеров, но я хочу иметь глобальный контроль над тем, как они выглядят ,

Обновление: Это была моя ошибка, код изменяет UIColor всех UINavigationBars, но требует, чтобы корневой навигационный контроллер был покрыт и раскрыт (например, представлен контроллер модального представления), затем он перерисовывает себя с новым UIColors!

Спасибо!

Ответы [ 4 ]

17 голосов
/ 24 июня 2015

Теперь в iOS 8 мы можем установить цвет оттенка следующим образом: -

self.navigationController.navigationBar.barTintColor = [UIColor redColor];
14 голосов
/ 24 февраля 2012

Когда вы объявляете свой UINavigationController, попробуйте это:

UINavigationController *myNavController = 
[[UINavigationController alloc] initWithRootViewController:myRootViewController];
myNavController.navigationBar.tintColor = 
    [UIColor colorWithRed:arc4random() % 100 / 100.0f
                    green:arc4random() % 100 / 100.0f
                     blue:arc4random() % 100 / 100.0f
                    alpha:1.0f];
13 голосов
/ 17 октября 2013

Вы можете изменить цвета панели глобально, используя appearance прокси:

NSDictionary *textTitleOptions = 
[NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], 
                                           UITextAttributeTextColor, 
                                           [UIColor whiteColor],  
                                           UITextAttributeTextShadowColor, nil];

[[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions];
textTitleOptions = 
 [NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], 
                                            UITextAttributeTextColor, nil];
[[UINavigationBar appearance] setTintColor:[UIColor redColor]];
[[UIToolbar appearance] setTintColor:[UIColor redColor]];
[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]];
4 голосов
/ 01 марта 2012

Полное решение, которое мгновенно меняет цвет панели навигации и запоминает предпочтения последующих запусков, можно найти здесь: iPhone iOS, как перерисовать UINavigationBar по требованию?

...