web-dev-qa-db-fra.com

Comment puis-je changer les couleurs du texte et des icônes pour tabBarItems dans iOS 7?

Comment puis-je changer les couleurs du texte et des icônes pour UITabBar et UITabBarItem dans iOS 7? Le texte gris par défaut semble sombre et difficile à lire pour les éléments de barre d'onglets non sélectionnés.

27
Ed Fernandez

Il y a deux choses que vous devez faire pour cela:

1) Si vous souhaitez personnaliser le TabBar lui-même, vous devez définir le barTintColor pour le 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) Définissez l'apparence du texte tabBarItem pour chaque état que vous souhaitez remplacer:

[[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];
69
Ed Fernandez

Cela a fonctionné pour moi, pour teinter les éléments non actifs dans la barre d'onglets

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

// ici, vous devez utiliser l'icône avec la couleur que vous voulez, car elle sera rendue telle quelle

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

// cette icône est utilisée pour l'onglet sélectionné et elle sera teintée comme défini dans

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

La réponse d'Ed est parfaite, mais permettez-moi d'ajouter une chose. TabBar est par défaut translucide, donc affecté par la couleur de la vue sous TabBar (c'est-à-dire que la couleur de la vue de chaque membre viewController affecte l'apparence de TabBar.).

J'ai donc mis le code ci-dessous pour ne pas être affecté.

self.tabBarController.tabBar.translucent = false;

Avec la réponse d'Ed, voici un code complet que j'utilise maintenant.

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

Testé dans iOS 8 pour la couleur du texte permanent (sélectionné/non sélectionné) et les couleurs de l'image (sélectionné/non sélectionné) sans créer deux images avec des couleurs différentes pour chaque onglet:

Couleur du texte:

[[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];

Couleur des images: (en supposant que les images originales ont la couleur que vous souhaitez afficher comme non sélectionnée)

Dans un ITabBarController sous-classe -awakeFromNib:

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

Crédits: tout Internet et débordement de pile XD

7
Kappe

Moyen sans code pour changer la couleur du texte dans la barre d'onglets:

Si vous utilisez simplement iOS 10, vous pouvez modifier la teinte de l'image dans votre barre d'onglets

enter image description here

Si vous prenez également en charge iOS 9 et versions antérieures, vous devez également ajouter tintColor à vos attributs d'exécution de définisseur d'utilisateur dans chaque élément de la barre d'onglets

enter image description here

si vous souhaitez également changer la couleur de votre icône, assurez-vous que l'image de couleur correcte se trouve dans votre dossier de test et changez le rendu en image originale

enter image description here

6

Cela devrait fonctionner parfaitement pour iOS 8 également

Pour l'élément de barre d'onglets non sélectionné:

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

Pour l'élément de barre d'onglets sélectionné:

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

La réponse @Usharao ci-dessus a fonctionné pour moi;

Mon problème était au démarrage tous mes TabBarItems semblaient être dans un état sélectionné, tous ayant la même couleur teintée "Bleu". En sélectionnant tous les onglets un par un, l'état coloré deviendrait corrigé.

J'ai utilisé ce code ci-dessous dans ma classe AppDelegate: (compatible pour> = IOS9)

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

Maintenant de iOS10 on peut utiliser

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

pour changer la couleur par défaut de l'image et du texte TabBarItem à l'état non sélectionné.

Ainsi, la paire de propriétés tintColor et unselectedItemTintColor nous donne un contrôle total sur les couleurs des éléments.

0
malex

Vous l'essayez

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"];
    }
0
Ibrahim Erkaplan

utilisation self.tabBarController.tabBar.barStyle = UIBarStyleBlack; pour rendre la barre d'onglets noire

0
UUDDLRLRSL_