setTintColor: на внешний вид UINavigationBar не влияет

Это мой код для изменения цвета панели вкладок и панели навигации моего приложения:

UIColor* color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blue.jpeg"]];

//set colors
[[UINavigationBar appearance] setTintColor:color];
[[UITabBar appearance] setTintColor:color];

Тем не менее, изменяется только цвет оттенка панели вкладок; панель навигации остается черной. Почему setTintColor: работает для панели вкладок, но не для панели навигации?

Изменить: интересно, что при тестировании на реальном устройстве (iPhone 4 под управлением iOS 5.0.1) ни панель вкладок ни, ни цвет панели навигации не меняется; оба остаются черными. На симуляторе, по крайней мере, меняется панель вкладок... какое объяснение этому поведению? Спасибо!

Редактировать 2: вот часть моего кода в applicationDidFinishLaunching:

UIColor* color = [UIColor colorWithPatternImage:[UIImage imageNamed:@"blue.jpeg"]];

//create navigation controllers
firstNavigationController = [[UINavigationController alloc] 
    initWithRootViewController:viewController1];
[[firstNavigationController navigationBar] setTintColor:color];
//[[firstNavigationController navigationBar] setBarStyle:UIBarStyleBlack];

secondNavigationController = [[UINavigationController alloc] 
    initWithRootViewController:viewController2];
[[secondNavigationController navigationBar] setTintColor:color];
//[[secondNavigationController navigationBar] setBarStyle:UIBarStyleBlack];

thirdNavigationController = [[UINavigationController alloc] 
    initWithRootViewController:viewController3];
[[thirdNavigationController navigationBar] setTintColor:color];
//[[thirdNavigationController navigationBar] setBarStyle:UIBarStyleBlack];

fourthNavigationController = [[UINavigationController alloc] 
    initWithRootViewController:viewController4];
[[fourthNavigationController navigationBar] setTintColor:color];
//[[fourthNavigationController navigationBar] setBarStyle:UIBarStyleBlack];

//create tab bar controller
self.tabBarController = [[UITabBarController new] autorelease];
self.tabBarController.delegate = self;

//set controllers
self.tabBarController.viewControllers = [NSArray 
    arrayWithObjects:firstNavigationController, secondNavigationController, 
    thirdNavigationController, fourthNavigationController, nil];

person eric.mitchell    schedule 25.01.2012    source источник
comment
Попробуйте что-нибудь быстро здесь. В частности, укажите UINavigationBar и измените его свойство tintColor вместо того, чтобы использовать глобальную реализацию и посмотреть, работает ли это.   -  person CodaFi    schedule 25.01.2012


Ответы (2)


Найдите RGB из вашего "blue.jpeg" и установите их как цвет оттенка...

self.navigationController.navigationBar.tintColor = [UIColor colorWithRed:213.0/255.0 green:166.0/255.0 blue:39.0/255.0 alpha:1];

Или, когда вы устанавливаете изображение в качестве цвета фона, вы можете использовать код ниже...

self.navigationController.navigationBar.layer.contents = (id)[UIImage imageNamed:@"blue.jpeg"].CGImage;
person alloc_iNit    schedule 25.01.2012

Из многих других копаний я узнал, что установка свойства tintColor на цвет, сделанный из изображения, считается «взломом». Поддерживаются только цвета RGB, и ожидается, что они будут правильно работать с этим свойством. Итак, у вас есть это. Из-за NDA я не могу дать больше подробностей, но как только iOS 6 станет общедоступной, я постараюсь обновить ее.

person eric.mitchell    schedule 28.06.2012