Pregunta

El UINavigationBar y UISearchBar ambos tienen una propiedad tintColor que le permite cambiar el color de la tinta (sorprendente, lo sé) de estos dos elementos. Quiero hacer lo mismo a la UITabBar en mi solicitud, pero he encontrado ahora manera de cambiarlo por el color negro por defecto. ¿Alguna idea?

¿Fue útil?

Solución

he sido capaz de hacer que funcione como subclase un UITabBarController y el uso de clases privadas:

@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

Otros consejos

iOS 5 ha añadido algunos nuevos métodos de apariencia para personalizar el aspecto de la mayoría de los elementos de interfaz de usuario.

Puede orientar cada instancia de un UITabBar en su aplicación utilizando el proxy apariencia.

Para iOS 5 + 6:

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

Para iOS 7 o superior, por favor utilice la siguiente:

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

Usando el proxy apariencia cambiará cualquier instancia barra de pestañas en toda la aplicación. Para una instancia específica, utilizar una de las nuevas propiedades en dicha clase:

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

Tengo una adición a la respuesta final. Si bien el esquema esencial es correcta, el truco de usar un color parcialmente transparente puede ser mejorado. Asumo que es sólo para dejar que el gradiente por defecto para mostrar a través. Ah, también, la altura de la TabBar es de 49 píxeles en lugar de 48, por lo menos en OS 3.

Por lo tanto, si usted tiene una imagen apropiada 1 x 49 con un gradiente, esta es la versión de viewDidLoad se debe utilizar:

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

}

Cuando sólo tiene que utilizar los botones de addSubview perderá clickability, así que en vez de

[[self tabBar] addSubview:v];

uso:

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

No hay manera simple de hacer esto, que básicamente necesita subclase UITabBar e implementar dibujo a hacer lo que quiera personalizado. Es un poco de trabajo para el efecto, pero puede valer la pena. Yo recomiendo la presentación de un insecto con Apple para conseguir que añade a un futuro iPhone SDK.

A continuación se presenta la solución perfecta para esto. Esto funciona bien para mí para IOS5 y 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];
}

En iOS 7:

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

También recomiendo primero aplicar en función de sus deseos visuales:

[[UITabBar appearance] setBarStyle:UIBarStyleBlack];

El estilo de la barra pone un separador sutil entre el contenido de su punto de vista y su barra de pestañas.

[[self tabBar] insertSubview:v atIndex:0]; funciona perfectamente para mí.

para mí es muy fácil de cambiar el color de Tabbar como: -

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


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

Probar !!!

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

por sólo color de fondo

Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour];

o esta en App Delegado

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

para cambiar el color de los iconos de anular la selección de barra de pestañas

Para 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];
}

Por encima de IOS 10:

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

Hay algunas buenas ideas en las respuestas existentes, muchos de ellos trabajan de forma ligeramente diferente y lo que usted elija dependerá también de qué dispositivos de destino y qué tipo de mirada que usted está apuntando a lograr. UITabBar es notoriamente poco intuitivo cuando se trata de la personalización de su apariencia, pero aquí hay algunos más trucos que pueden ayudar:

1). Si usted está buscando para deshacerse de la capa brillante para una apariencia más plana hacer:

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

2). Para configurar imágenes personalizadas a los botones de barra de pestañas hacer algo como:

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

Cuando selected y unselected son objetos UIImage de su elección. Si desea que sea un color plano, la solución más sencilla que he encontrado es crear un UIView con el backgroundColor deseada y luego simplemente la hacen en un UIImage con la ayuda de QuartzCore. Yo uso el método siguiente en una categoría en UIView para obtener una UIImage con el contenido de la vista:

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

3) Por último, es posible que desee personalizar el estilo de los títulos de los botones. Hacer:

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

Esto le permite hacer algunos ajustes, pero sigue siendo bastante limitada. En particular, no se puede modificar libremente en el que el texto se coloca dentro del botón, y no puede tener diferentes colores para los botones seleccionados / no seleccionados. Si usted quiere hacer el diseño de texto más específico, acaba de establecer UITextAttributeTextColor sea claro y añadir su texto en las imágenes selected y unselected de la parte (2).

[v setBackgroundColor ColorwithRed: Green: Blue: ];

Otra solución (que es un corte) es establecer el alfa en el tabBarController a 0,01 de manera que es prácticamente invisible y aún así puede hacer clic. A continuación, establezca un control de un ImageView en la parte inferior de la punta MainWindow su imagen personalizada barra de pestañas debajo de la tabBarController alpha'ed con. A continuación, cambiar las imágenes, cambiar colores o punto culminante cuando el tabBarController cambia vistas.

Sin embargo, se pierde la funcionalidad '... más' y personalizar.

Hola No estoy usando el SDK de iOS 4 y yo era capaz de resolver este problema con sólo dos líneas de código y es dice así

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

Espero que esto ayude!

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 respuesta: (de Vaibhav Gaikwad)

Para cambiar el color de los iconos de anular la selección de barra de pestañas:

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)
        }
}

Para cambiar el color del texto solamente:

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

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

Swift 3 utilizando la apariencia de su AppDelegate haga lo siguiente:

UITabBar.appearance().barTintColor = your_color

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top