Изменить tintColor невыбранного заголовка элемента UITabBarController и фонового изображения

Как я могу изменить tintColor невыбранного заголовка UITabBarItem и фонового изображения iOS 8?

Цвет по умолчанию для невыделенного состояния - светло-серый, но он не отображается на моем темном фоне UITabBar.

Я бы хотел, чтобы мое невыделенное состояние имело цвет [UIColor blackColor]

Внутри моего приложения делегат завершил запуск вариантов: у меня есть

UIImage *deselectedE = [[UIImage imageNamed:@"mincraft_axe_green_32.png"] imageWithRenderingMode:UIImageRenderingModeAutomatic];
UIImage *selectedE = [[UIImage imageNamed:@"mincraft_axe_green_32.png"] imageWithRenderingMode:UIImageRenderingModeAutomatic];
e.tabBarItem =  [[UITabBarItem alloc] initWithTitle:@"Profile" image:deselectedE selectedImage:selectedE];
[[UITabBar appearance] setTintColor:[UIColor blackColor]];

person SleepsOnNewspapers    schedule 24.10.2014    source источник
comment
в iOS 10+ и Swift 3 можно tabBarCtrl.tabBar.unselectedItemTintColor = UIColor.gray   -  person Anchor    schedule 29.10.2016
comment
stackoverflow.com/a/40741444/1652402   -  person Daniel Galasko    schedule 22.11.2016


Ответы (4)


Догадаться!

Используйте это, чтобы изменить цвет текста:

[[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor greenColor] }
                                         forState:UIControlStateNormal];
[[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor blackColor] }
                                         forState:UIControlStateSelected];

И убедитесь, что для изображений установлен режим рендеринга ОРИГИНАЛЬНЫЙ.

UIImage *deselectedImage = [[UIImage imageNamed:@"deselectedImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
UIImage *selectedImage = [[UIImage imageNamed:@"selectedImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
person SleepsOnNewspapers    schedule 24.10.2014
comment
Оригинальные изображения - это хорошо. Спасибо, что поделился. - person VaporwareWolf; 21.11.2014
comment
Что делать, если мой исходный значок черный, но я хочу, чтобы он был белым? - person Mark Buikema; 02.06.2015
comment
У меня была аналогичная ситуация, но я хотел, чтобы мое невыделенное изображение было белым (исходное изображение было белым), а мое выбранное изображение было желтым (в настоящее время серым). Я уверен, что его решение, приведенное выше, работает, если я хотел изменить цвет выбранного изображения, но я хотел использовать встроенное свойство цвета оттенка для выбранного изображения. Когда я попытался поместить выбранное изображение в инспекторе атрибутов в разделе Элемент панели вкладок, изображение оставалось пустым во время выполнения (ошибка). Я использовал это решение в своем делегате приложения: [ссылка] (stackoverflow.com/questions/26515703/) - person Renee Olson; 31.07.2015
comment
@ReneeOlson, это немного взломано, но работает. Рад, что немного помогли :) - person SleepsOnNewspapers; 01.08.2015
comment
Не могу поверить, что вам нужно предварительно отрендерить оттенок в iOS 8. Такой шаг назад! Но спасибо! Любой способ реализовать это в раскадровке? - person jowie; 22.04.2016
comment
К сожалению, это не работает на iOS 13 / XCode 11.x - person Nithin; 30.01.2020

В вашем AppDelegate.m внутри application didFinishLaunchingWithOptions: используйте следующий код:

//unselected icon tint color 
[[UIView appearanceWhenContainedIn:[UITabBar class], nil] setTintColor:[UIColor redColor]];

//selected tint color 
[[UITabBar appearance] setTintColor:[UIColor greenColor]];

//text tint color 
[[UITabBarItem appearance] setTitleTextAttributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor] }
                                     forState:UIControlStateNormal];

//background tint color 
[[UITabBar appearance] setBarTintColor:[UIColor blueColor]];
person TheSD    schedule 24.10.2014
comment
При изменении невыбранного оттенка цвет возвращается обратно после того, как этот элемент был выбран, а затем отменен. Кажется, что единственный способ сделать невыделенное состояние желаемым цветом - это использовать собственное изображение. Вы можете увидеть, как это сделать, здесь: stackoverflow.com/a/19662170/4114683 - person TheSD; 24.10.2014
comment
Я попытался и обнаружил, что вы также можете использовать [[UIButton appearance] setTintColor:[UIColor greenColor]]; для обеспечения согласованности между выбранными элементами панели вкладок и ярлыками кнопок в iOS 7/8 (например, как приложение Музыка) - person Nicolas Miari; 06.01.2015
comment
Работайте как шарм. Спасибо! - person Vladislav Kovalyov; 11.12.2015
comment
К сожалению, в более поздних версиях это устарело. - person Totoro; 22.02.2017
comment
[[Внешний вид UIViewWhenContainIn: [класс UITabBar], ноль] setTintColor: [UIColor redColor]]; не только устарел, но и не работает. - person coolcool1994; 25.10.2017

Вы также можете визуализировать изображение как оригинальное из инспектора атрибутов для файла актива без написания кода.

введите описание изображения здесь

person Bhavuk Jain    schedule 05.06.2016
comment
Это не из раскадровки, а из инспектора атрибутов для файла ресурсов. Кроме этого, это лучший ответ здесь. - person Marmoy; 19.08.2016

Вы также можете настроить его прямо в раскадровке ... Посмотрите мой ответ здесь: Как установить невыделенный оттенок UITabBarItem, *** включая системные элементы *** (iOS7)

Если вы используете Storyboard, вы также можете установить как Image для Bar Item, так и Selected Image для Selected Bar Item, чтобы получить неизмененное изображение в tabBar.

В качестве альтернативы в каталоге Assets вы можете выбрать Render As: Original Image в атрибутах вашего изображения (View> Utilities> Show Attributes Inspector или ярлык ⌥⌘4 (Option + Command + 4))

person Hugues BR    schedule 31.05.2016