Question

Le UINavigationBar et UISearchBar les deux ont une propriété tintColor qui vous permet de changer la couleur de teinte (surprenante, je sais) de ces deux éléments. Je veux faire la même chose à l'UITabBar dans ma demande, mais ai trouvé maintenant moyen de changer la valeur par défaut de couleur noire. Toutes les idées?

Était-ce utile?

La solution

Je suis en mesure de le faire fonctionner par un sous-classement UITabBarController et en utilisant des classes privées:

@interface UITabBarController (private)
- (UITabBar *)tabBar;
@end

@implementation CustomUITabBarController


- (void)viewDidLoad {
    [super viewDidLoad];

    CGRect frame = CGRectMake(0.0, 0.0, self.view.bounds.size.width, 48);
    UIView *v = [[UIView alloc] initWithFrame:frame];
    [v setBackgroundColor:kMainColor];
    [v setAlpha:0.5];
    [[self tabBar] addSubview:v];
    [v release];

}
@end

Autres conseils

iOS 5 a ajouté quelques nouvelles méthodes d'apparence pour personnaliser l'apparence de la plupart des éléments de l'interface utilisateur.

Vous pouvez cibler tous les cas d'un UITabBar dans votre application en utilisant le proxy de l'apparence.

Pour iOS 5 + 6:

[[UITabBar appearance] setTintColor:[UIColor redColor]];

Pour iOS 7 et ci-dessus, s'il vous plaît utiliser les éléments suivants:

[[UITabBar appearance] setBarTintColor:[UIColor redColor]];

En utilisant le proxy de l'apparence changera toute instance de barre d'onglets à travers l'application. Pour une instance spécifique, utilisez l'une des nouvelles propriétés de cette classe:

UIColor *tintColor; // iOS 5+6
UIColor *barTintColor; // iOS 7+
UIColor *selectedImageTintColor;
UIImage *backgroundImage;
UIImage *selectionIndicatorImage;

J'ai un additif à la réponse finale. Bien que le système essentiel est correct, l'astuce d'utiliser une couleur partiellement transparente peut être améliorée. Je suppose que c'est seulement pour laisser le dégradé par défaut de montrer à travers. Oh, également, la hauteur de la TabBar est de 49 pixels au lieu de 48, au moins dans OS 3.

Donc, si vous avez une image 1 x 49 appropriée avec un gradient, c'est la version de viewDidLoad vous devez utiliser:

- (void)viewDidLoad {

    [super viewDidLoad]; 

    CGRect frame = CGRectMake(0, 0, 480, 49);
    UIView *v = [[UIView alloc] initWithFrame:frame];
    UIImage *i = [UIImage imageNamed:@"GO-21-TabBarColorx49.png"];
    UIColor *c = [[UIColor alloc] initWithPatternImage:i];
    v.backgroundColor = c;
    [c release];
    [[self tabBar] addSubview:v];
    [v release];

}

Lorsque vous utilisez juste addSubview vos boutons vont perdre cliquabilité, donc au lieu de

[[self tabBar] addSubview:v];

utilisation:

[[self tabBar] insertSubview:v atIndex:0];

Il n'y a pas de moyen simple pour ce faire, vous devez essentiellement sous-classe UITabBar et mettre en œuvre le dessin personnalisé pour faire ce que vous voulez. Il est tout à fait un peu de travail pour l'effet, mais il peut valoir la peine. Je recommande le dépôt d'un bug avec Apple pour l'obtenir ajouté à un SDK futur iPhone.

Ce qui suit est la solution parfaite pour cela. Cela fonctionne bien avec moi pour iOS5 et iOS4.

//---- For providing background image to tabbar
UITabBar *tabBar = [tabBarController tabBar]; 

if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) {
    // ios 5 code here
    [tabBar setBackgroundImage:[UIImage imageNamed:@"image.png"]];
} 
else {
    // ios 4 code here
    CGRect frame = CGRectMake(0, 0, 480, 49);
    UIView *tabbg_view = [[UIView alloc] initWithFrame:frame];
    UIImage *tabbag_image = [UIImage imageNamed:@"image.png"];
    UIColor *tabbg_color = [[UIColor alloc] initWithPatternImage:tabbag_image];
    tabbg_view.backgroundColor = tabbg_color;
    [tabBar insertSubview:tabbg_view atIndex:0];
}

Sur iOS 7:

[[UITabBar appearance] setBarTintColor:[UIColor colorWithRed:(38.0/255.0) green:(38.0/255.0) blue:(38.0/255.0) alpha:1.0]];

Je recommande également la mise d'abord en fonction de vos désirs visuels:

[[UITabBar appearance] setBarStyle:UIBarStyleBlack];

Le style bar met un séparateur subtil entre le contenu de votre vue et votre barre d'onglets.

[[self tabBar] insertSubview:v atIndex:0]; fonctionne parfaitement pour moi.

pour moi il est très simple de changer la couleur de Tabbar comme: -

[self.TabBarController.tabBar setTintColor:[UIColor colorWithRed:0.1294 green:0.5686 blue:0.8353 alpha:1.0]];


[self.TabBarController.tabBar setTintColor:[UIColor "YOUR COLOR"];

Essayez ceci !!!

 [[UITabBar appearance] setTintColor:[UIColor redColor]];
 [[UITabBar appearance] setBarTintColor:[UIColor yellowColor]];

pour que la couleur de fond

Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour];

ou dans ce délégué App

[[UITabBar appearance] setBackgroundColor:[UIColor blackColor]];

pour changer la couleur des icônes de unselect TabBar

Pour iOS 10:

// this code need to be placed on home page of tabbar    
for(UITabBarItem *item in self.tabBarController.tabBar.items) {
    item.image = [item.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}

Au-dessus de 10 iOS:

// this need to be in appdelegate didFinishLaunchingWithOptions
[[UITabBar appearance] setUnselectedItemTintColor:[UIColor blackColor]];

Il y a quelques bonnes idées dans les réponses existantes, beaucoup de travail un peu différemment et ce que vous choisirez dépendra aussi de quels appareils vous ciblez et quel genre de regard que vous visez à atteindre. UITabBar est notoirement unintuitive quand il vient à la personnalisation de son apparence, mais voici quelques trucs qui peuvent aider:

1). Si vous cherchez à vous débarrasser de la superposition brillant pour un look plus plat faire:

tabBar.backgroundColor = [UIColor darkGrayColor]; // this will be your background
[tabBar.subviews[0] removeFromSuperview]; // this gets rid of gloss

2). Pour définir des images personnalisées aux boutons de Tabbar faire quelque chose comme:

for (UITabBarItem *item in tabBar.items){
    [item setFinishedSelectedImage:selected withFinishedUnselectedImage:unselected];
    [item setImageInsets:UIEdgeInsetsMake(6, 0, -6, 0)];
}

selected et unselected sont des objets UIImage de votre choix. Si vous souhaitez les être une couleur à plat, la solution la plus simple que j'ai trouvé est de créer un UIView avec le backgroundColor désiré puis juste rendre dans un UIImage avec l'aide de QuartzCore. J'utilise la méthode suivante dans une catégorie sur UIView pour obtenir un UIImage avec le contenu de la vue:

- (UIImage *)getImage {
    UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, [[UIScreen mainScreen]scale]);
    [[self layer] renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;
}

3) Enfin, vous pouvez personnaliser le style des titres des boutons. Do:

for (UITabBarItem *item in tabBar.items){
    [item setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                [UIColor redColor], UITextAttributeTextColor,
                [UIColor whiteColor], UITextAttributeTextShadowColor,
                [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], UITextAttributeTextShadowOffset,
                [UIFont boldSystemFontOfSize:18], UITextAttributeFont,
            nil] forState:UIControlStateNormal];
}

Cela vous permet de faire quelques ajustements, mais encore assez limitée. En particulier, vous ne pouvez pas modifier librement où le texte est placé dans le bouton, et ne peut pas avoir des couleurs différentes pour les boutons sélectionnés / non sélectionnés. Si vous voulez faire la mise en page de texte plus précis, vient de mettre UITextAttributeTextColor à être clair et ajoutez votre texte dans les images selected et unselected de la partie (2).

[v setBackgroundColor ColorwithRed: Green: Blue: ];

Une autre solution (qui est une entaille) est de mettre l'alpha sur le tabBarController à 0,01 de sorte qu'il est pratiquement invisible mais toujours cliquable. Définissez ensuite un un contrôle ImageView sur le fond de la pointe MainWindow avec votre image personnalisée sous TabBar la tabBarCOntroller alpha'ed. échanger ensuite les images, changer les couleurs ou hightlight lorsque le tabbarcontroller passe vues.

Cependant, vous perdez la '... plus' et de personnaliser les fonctionnalités.

Salut Il utilise iOS SDK am 4 et j'ai pu résoudre ce problème avec seulement deux lignes de code et il est va comme ceci

tBar.backgroundColor = [UIColor clearColor];
tBar.backgroundImage = [UIImage imageNamed:@"your-png-image.png"];

Hope this helps!

if ([tabBar respondsToSelector:@selector(setBackgroundImage:)]) {
    // ios 5 code here
    [tabBar setBackgroundImage:[UIImage imageNamed:@"image.png"]];
} 
else {
    // ios 4 code here
    CGRect frame = CGRectMake(0, 0, 480, 49);
    UIView *tabbg_view = [[UIView alloc] initWithFrame:frame];
    UIImage *tabbag_image = [UIImage imageNamed:@"image.png"];
    UIColor *tabbg_color = [[UIColor alloc] initWithPatternImage:tabbag_image];
    tabbg_view.backgroundColor = tabbg_color;
    [tabBar insertSubview:tabbg_view atIndex:0];
}

Swift 3.0 réponse: (à partir de Vaibhav Gaikwad)

Pour changer la couleur des icônes de unselect barre d'onglets:

if #available(iOS 10.0, *) {
        UITabBar.appearance().unselectedItemTintColor = UIColor.white
    } else {
        // Fallback on earlier versions
        for item in self.tabBar.items! {
            item.image = item.image?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
        }
}

Pour changer la couleur du texte seulement:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .normal)

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red, for: .selected)

Swift 3 en utilisant l'apparence de votre AppDelegate procédez comme suit:

UITabBar.appearance().barTintColor = your_color

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top