UINavigationBar y UISearchBar tienen una propiedad tintColor que le permite cambiar el color del tinte (sorprendente, lo sé) de ambos elementos. Quiero hacer lo mismo con UITabBar en mi aplicación, pero ahora he encontrado la manera de cambiarlo del color negro predeterminado. ¿Algunas ideas?
87
Respuestas:
He podido hacer que funcione subclasificando un UITabBarController y usando 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
fuente
iOS 5 ha agregado algunos métodos de apariencia nuevos para personalizar el aspecto de la mayoría de los elementos de la interfaz de usuario.
Puede orientar cada instancia de una UITabBar en su aplicación utilizando el proxy de apariencia.
Para iOS 5 + 6:
[[UITabBar appearance] setTintColor:[UIColor redColor]];
Para iOS 7 y superior, utilice lo siguiente:
[[UITabBar appearance] setBarTintColor:[UIColor redColor]];
El uso del proxy de apariencia cambiará cualquier instancia de la barra de pestañas en toda la aplicación. Para una instancia específica, use una de las nuevas propiedades en esa clase:
UIColor *tintColor; // iOS 5+6 UIColor *barTintColor; // iOS 7+ UIColor *selectedImageTintColor; UIImage *backgroundImage; UIImage *selectionIndicatorImage;
fuente
Tengo un apéndice a la respuesta final. Si bien el esquema esencial es correcto, se puede mejorar el truco de usar un color parcialmente transparente. Supongo que es solo para dejar que se vea el degradado predeterminado. Ah, también, la altura de TabBar es de 49 píxeles en lugar de 48, al menos en OS 3.
Entonces, si tiene una imagen apropiada de 1 x 49 con un degradado, esta es la versión de viewDidLoad que debe usar:
- (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]; }
fuente
Cuando solo usa addSubview, sus botones perderán la capacidad de hacer clic, por lo que en lugar de
[[self tabBar] addSubview:v];
utilizar:
[[self tabBar] insertSubview:v atIndex:0];
fuente
No hay una forma sencilla de hacer esto, básicamente necesitas crear una subclase de UITabBar e implementar un dibujo personalizado para hacer lo que quieras. Es bastante trabajo para el efecto, pero puede valer la pena. Recomiendo presentar un error a Apple para agregarlo a un futuro iPhone SDK.
fuente
La siguiente es la solución perfecta para esto. Esto funciona bien conmigo para iOS5 e 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]; }
fuente
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 configurar primero en función de sus deseos visuales:
[[UITabBar appearance] setBarStyle:UIBarStyleBlack];
El estilo de barra coloca un sutil separador entre el contenido de la vista y la barra de pestañas.
fuente
[[self tabBar] insertSubview:v atIndex:0];
funciona perfectamente para mí.fuente
para mí es muy simple 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"];
¡¡¡Prueba esto!!!
fuente
[[UITabBar appearance] setTintColor:[UIColor redColor]]; [[UITabBar appearance] setBarTintColor:[UIColor yellowColor]];
fuente
solo por color de fondo
Tabbarcontroller.tabBar.barTintColor=[UIColor redcolour];
o esto en App Delegate
[[UITabBar appearance] setBackgroundColor:[UIColor blackColor]];
para cambiar el color de los iconos deseleccionados de la 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]];
fuente
Hay algunas buenas ideas en las respuestas existentes, muchas funcionan de manera ligeramente diferente y lo que elija también dependerá de los dispositivos a los que se dirija y del tipo de aspecto que desee lograr.
UITabBar
es notoriamente poco intuitivo cuando se trata de personalizar su apariencia, pero aquí hay algunos trucos más que pueden ayudar:1). Si está buscando deshacerse de la superposición brillante para una apariencia más plana, haga:
tabBar.backgroundColor = [UIColor darkGrayColor]; // this will be your background [tabBar.subviews[0] removeFromSuperview]; // this gets rid of gloss
2). Para configurar imágenes personalizadas en los botones de tabBar, haga algo como:
for (UITabBarItem *item in tabBar.items){ [item setFinishedSelectedImage:selected withFinishedUnselectedImage:unselected]; [item setImageInsets:UIEdgeInsetsMake(6, 0, -6, 0)]; }
Donde
selected
yunselected
sonUIImage
objetos de tu elección. Si desea que sean de un color plano, la solución más simple que encontré es crear unUIView
con el deseadobackgroundColor
y luego convertirlo en unUIImage
con la ayuda de QuartzCore. Utilizo el siguiente método en una categoríaUIView
para obtener unUIImage
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 aún bastante limitados. En particular, no puede modificar libremente dónde se coloca el texto dentro del botón y no puede tener diferentes colores para los botones seleccionados / no seleccionados. Si desea hacer un diseño de texto más específico, simplemente configúrelo
UITextAttributeTextColor
para que sea claro y agregue su texto en las imágenesselected
yunselected
de la parte (2).fuente
[v setBackgroundColor ColorwithRed: Green: Blue: ];
fuente
Otra solución (que es un truco) es establecer el alfa en el tabBarController en 0.01 para que sea virtualmente invisible pero aún se pueda hacer clic. Luego, establezca un control ImageView en la parte inferior de la plumilla de MainWindow con su imagen de barra de pestañas personalizada debajo de tabBarCOntroller alfa'ed. Luego intercambie las imágenes, cambie los colores o resalte cuando el controlador de la barra de pestañas cambie de vista.
Sin embargo, pierde la funcionalidad '... más' y personalización.
fuente
Hola, estoy usando iOS SDK 4 y pude resolver este problema con solo dos líneas de código y es así
tBar.backgroundColor = [UIColor clearColor]; tBar.backgroundImage = [UIImage imageNamed:@"your-png-image.png"];
¡Espero que esto ayude!
fuente
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]; }
fuente
Respuesta rápida 3.0: (de Vaibhav Gaikwad)
Para cambiar el color de los iconos deseleccionados de la 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) } }
Solo para cambiar el color del texto:
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.white], for: .normal) UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.red, for: .selected)
fuente
Swift 3 usando la apariencia de tu
AppDelegate
haz lo siguiente:UITabBar.appearance().barTintColor = your_color
fuente