Как изменить цвет текста и значков для tabBarItems в iOS 7?

Как я могу изменить цвет текста и значков для UITabBar и UITabBarItems в iOS 7? Серый текст по умолчанию выглядит тусклым и трудно читаемым для невыбранных элементов панели вкладок.

10 ответов

Решение

Для этого нужно сделать две вещи:

1) Если вы хотите настроить сам TabBar, вам нужно установить barTintColor для tabBarController:

    // this will generate a black tab bar
    tabBarController.tabBar.barTintColor = [UIColor blackColor];

    // this will give selected icons and text your apps tint color
    tabBarController.tabBar.tintColor = appTintColor;  // appTintColor is a UIColor *

2) Установите внешний вид текста tabBarItem для каждого состояния, которое вы хотите переопределить:

[[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
                                                    NSForegroundColorAttributeName : appTintColor
                                                    } forState:UIControlStateSelected];


// doing this results in an easier to read unselected state then the default iOS 7 one
[[UITabBarItem appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:10.0f],
                                                    NSForegroundColorAttributeName : [UIColor colorWithRed:.5 green:.5 blue:.5 alpha:1]
                                                    } forState:UIControlStateNormal];

Это сработало для меня, чтобы подкрасить не активные элементы в панели вкладок

UITabBarItem *item = [self.tabBar.items objectAtIndex:1];

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

item.image = [[UIImage imageNamed:@"unselected.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

// этот значок используется для выбранной вкладки, и он будет окрашен, как определено в

self.tabBar.tintColor
item.selectedImage = [UIImage imageNamed:@"selected.png"];

Ответ Эда идеален, но позвольте мне добавить одну вещь. По умолчанию TabBar является полупрозрачным, поэтому на него влияет цвет представления под TabBar (то есть цвет представления каждого члена viewController влияет на внешний вид TabBar.).

Поэтому я установил ниже код, чтобы не быть затронутым

self.tabBarController.tabBar.translucent = false;

Вместе с ответом Эда вот полный код, который я сейчас использую.

self.tabBarController.tabBar.barTintColor = [UIColor blackColor];
self.tabBarController.tabBar.translucent = false;
self.tabBarController.tabBar.tintColor = [UIColor blueColor];

Код свободный способ изменить цвет текста в панели вкладок:

Если вы используете iOS 10, вы можете изменить оттенок изображения на панели вкладок.

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

Если вы также поддерживаете iOS 9 и ниже, вы также должны добавить tintColor к своим пользовательским атрибутам времени выполнения в каждом элементе панели вкладок.

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

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

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

Протестировано в iOS 8 для постоянного цвета текста (выбранный / невыбранный) и цветов изображения (выбранный / невыбранный) без создания двух изображений с разными цветами на каждой вкладке:

Цвет текста:

[[UITabBar appearance] setTintColor: selectedTabColor ];
    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                       **yourFont**, NSFontAttributeName,
                                                       ** selectedTabColor**, NSForegroundColorAttributeName,
                                                       nil] forState:UIControlStateNormal];

    [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                       **yourFont**, NSFontAttributeName,
                                                       **selectedTabColor**, NSForegroundColorAttributeName,
                                                       nil] forState:UIControlStateSelected];

Цвет изображения: (при условии, что исходные изображения имеют цвет, который вы хотите отобразить как невыбранный)

В подклассе UITabBarController -awakeFromNib:

    for (int i =0; i<self.viewControllers.count; i++)
    {
        UITabBarItem *tab = [self.tabBar.items objectAtIndex:i];
        tab.image = [tab.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
    }

Кредиты: весь интернет и переполнение стека XD

Это должно работать идеально для iOS 8 также

Для невыбранного элемента вкладки:

[[UIView appearanceWhenContainedIn:[UITabBar class], nil] setTintColor: [UIColor whiteColor]];

Для выбранного элемента вкладки:

[[UITabBar appearance] setTintColor:[UIColor orangeColor]];
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                           [UIColor whiteColor], UITextAttributeTextColor,
                                                           nil] 

Ответ @Usharao выше работал для меня;

Моя проблема была при запуске, все мои TabBarItems, казалось, были в выбранном состоянии, все с тем же "синим" тонированным цветом. При выборе всех вкладок одна за другой цветное состояние будет исправлено.

Я использовал этот код ниже в своем классе AppDelegate: (совместимо для>= IOS9)

[[UIView appearanceWhenContainedInInstancesOfClasses:@[[UITabBar class]]] 
                                        setTintColor:[UIColor lightGrayColor]];

Теперь из iOS10 можно использовать

@property (nonatomic, readwrite, copy, nullable) UIColor *unselectedItemTintColor

изменить цвет по умолчанию для TabBarItem изображение и текст в невыбранном состоянии.

Таким образом, пара свойств tintColor а также unselectedItemTintColor дает нам полный контроль над цветами предметов.

Вы попробуйте

for (UITabBarItem *item in self.tabBarController.tabBar.items) {
        item.image = [[UIImage imageNamed:@"youimage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

        [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
                                                           [UIColor whiteColor], UITextAttributeTextColor,
                                                           nil] forState:UIControlStateNormal];

        item.selectedImage = [UIImage imageNamed:@"youimage.png"];
    }

Использование self.tabBarController.tabBar.barStyle = UIBarStyleBlack; сделать панель вкладок черным

Другие вопросы по тегам