¿Cómo cambiar el color del icono / texto inactivo en la barra de tabs?

¿Cómo puedo cambiar el color de icono / texto inactivo en la barra de tabs de iOS 7? El de color gris

enter image description here

En cada primer ViewController para cada TabBar:

- (void)viewDidLoad { [super viewDidLoad]; // changing the unselected image color, you should change the selected image // color if you want them to be different self.tabBarItem.selectedImage = [[UIImage imageNamed:@"yourImage_selectedImage"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; self.tabBarItem.image = [[UIImage imageNamed:@"yourImage_image"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; } 

La clave de este código es ‘UIImageRenderingModeAlwaysOriginal’:

Modos de renderizado por Apple Documentation:

 UIImageRenderingModeAutomatic, // Use the default rendering mode for the context where the image is used UIImageRenderingModeAlwaysOriginal, // Always draw the original image, without treating it as a template UIImageRenderingModeAlwaysTemplate, // Always draw the image as a template image, ignoring its color information 

Para cambiar el color del texto:

En AppDelegate:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Add this if you only want to change Selected Image color // and/or selected image text [[UITabBar appearance] setTintColor:[UIColor redColor]]; // Add this code to change StateNormal text Color, [UITabBarItem.appearance setTitleTextAttributes: @{NSForegroundColorAttributeName : [UIColor greenColor]} forState:UIControlStateNormal]; // then if StateSelected should be different, you should add this code [UITabBarItem.appearance setTitleTextAttributes: @{NSForegroundColorAttributeName : [UIColor purpleColor]} forState:UIControlStateSelected]; return YES; } 

También puede configurar la propiedad Render As imágenes de la barra de tabs dentro de su catálogo de activos directamente. Allí tiene la opción de establecer la propiedad en Default , Original Image e Template Image .

Establecer la opción de renderización de la imagen

para cambiar el color de los icons de deselección de tabbar

Por debajo de 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]]; 

En lugar de agregarlo a cada UIViewController, puede crear una extensión y alterar la apariencia de un UITabBarController

Cambiar el color del icono no seleccionado

 extension UITabBarController { override public func viewDidLoad() { super.viewDidLoad() tabBar.items?.forEach({ (item) -> () in item.image = item.selectedImage?.imageWithColor(UIColor.redColor()).imageWithRenderingMode(.AlwaysOriginal) }) } } 

Cambiar el color del icono seleccionado

 let tabBarAppearance = UITabBar.appearance() tabBarAppearance.tintColor = UIColor.blackColor() 

Cambiar el color del título seleccionado

 let tabBarItemApperance = UITabBarItem.appearance() tabBarItemApperance.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Edmondsans-Bold", size: 10)!, NSForegroundColorAttributeName:UIColor.redColor()], forState: UIControlState.Normal) tabBarItemApperance.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Edmondsans-Bold", size: 10)!, NSForegroundColorAttributeName:UIColor.blackColor()], forState: UIControlState.Selected) 

UIImage extension

 extension UIImage { func imageWithColor(color1: UIColor) -> UIImage { UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale) color1.setFill() let context = UIGraphicsGetCurrentContext() CGContextTranslateCTM(context!, 0, self.size.height) CGContextScaleCTM(context!, 1.0, -1.0); CGContextSetBlendMode(context!, .Normal) let rect = CGRectMake(0, 0, self.size.width, self.size.height) as CGRect CGContextClipToMask(context!, rect, self.CGImage!) CGContextFillRect(context!, rect) let newImage = UIGraphicsGetImageFromCurrentImageContext()! as UIImage UIGraphicsEndImageContext() return newImage } } 

Hay una forma mejor sin usar cada ViewController solo mediante el uso de appdelegate.m

En su aplicación AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions function AppDelegate.m - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions , intente esto.

 UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; UITabBar *tabBar = tabBarController.tabBar; // repeat for every tab, but increment the index each time UITabBarItem *firstTab = [tabBar.items objectAtIndex:0]; // also repeat for every tab firstTab.image = [[UIImage imageNamed:@"someImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]; firstTab.selectedImage = [[UIImage imageNamed:@"someImageSelected.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

Para cambiar el color de selección de tabs en lugar de color azul:

  1. Seleccione el tabItem.
  2. Desde “Mostrar el inspector de identidad” en el menú del lado derecho.
  3. Establezca el atributo “tintColor” con su color preferido.

enter image description here

La nueva respuesta para hacer esto programáticamente a partir de iOS 10+ con Swift 3 es utilizar la API unselectedItemTintColor . Por ejemplo, si ha inicializado el controlador de la barra de tabs dentro de su AppDelegate , se vería como el siguiente:

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { ... let firstViewController = VC1() let secondViewController = VC2() let thirdViewController = VC3() let tabBarCtrl = UITabBarController() tabBarCtrl.viewControllers = [firstViewController, secondViewController, thirdViewController] // set the color of the active tab tabBarCtrl.tabBar.tintColor = UIColor.white // set the color of the inactive tabs tabBarCtrl.tabBar.unselectedItemTintColor = UIColor.gray // set the text color ... } 

Y para configurar los colores de texto seleccionados y no seleccionados:

 let unselectedItem = [NSForegroundColorAttributeName: UIColor.green] let selectedItem = [NSForegroundColorAttributeName: UIColor.red] self.tabBarItem.setTitleTextAttributes(unselectedItem, for: .normal) self.tabBarItem.setTitleTextAttributes(selectedItem, for: .selected) 

En Swift 3.0 puedes escribirlo de la siguiente manera

Para la imagen de la barra de tabs no seleccionada

 viewController.tabBarItem.image = UIImage(named: "image")?.withRenderingMode(.alwaysOriginal) 

Para la imagen de barra de tabs seleccionada

 viewController.tabBarItem.selectedImage = UIImage(named: "image")?.withRenderingMode(.alwaysOriginal) 

Creo que la respuesta de @anka es bastante buena, y también agregué el siguiente código para habilitar el color del tinte para los elementos resaltados:

  let image = UIImage(named:"tab-account")!.imageWithRenderingMode(.AlwaysTemplate) let item = tabBar.items![IC.const.tab_account] as! UITabBarItem item.selectedImage = image 

O en una línea:

  (tabBar.items![IC.const.tab_account] as! UITabBarItem).selectedImage = UIImage(named:"tab-account")!.imageWithRenderingMode(.AlwaysTemplate) 

Entonces parece:

barra de pestañas

Solo necesita poner este código en su primer ViewController llamado TabBarViewController (ViewDidload):

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. [self loadIconsTabBar]; } -(void) loadIconsTabBar{ UITabBar *tabBar = self.tabBarController.tabBar; // UITabBarItem *firstTab = [tabBar.items objectAtIndex:0]; UITabBarItem *secondTab = [tabBar.items objectAtIndex:1]; firstTab.image = [[UIImage imageNamed:@"icono1.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]; firstTab.selectedImage = [[UIImage imageNamed:@"icono1.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; secondTab.image = [[UIImage imageNamed:@"icono2.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ]; secondTab.selectedImage = [[UIImage imageNamed:@"icono2.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; } 

En lugar de agregar código de representación de imagen en cada viewController para tabBarItem, use la extensión

 extension UITabBar{ func inActiveTintColor() { if let items = items{ for item in items{ item.image = item.image?.withRenderingMode(.alwaysOriginal) item.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.green], for: .normal) item.setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.white], for: .selected) } } } } 

Luego llama esto en tu clase UITabBarController como

 class CustomTabBarViewController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() tabBar.inActiveTintColor() } } 

Obtendrás resultados como: enter image description here NOTA: no olvide asignar la clase CustomTabBarViewController a su TabBarController en el guión gráfico.

Solo necesita poner este código en su appDelegate.m llamada (didFinishLaunchingWithOptions):

 [UITabBarItem.appearance setTitleTextAttributes: @{NSForegroundColorAttributeName : [UIColor whiteColor]} forState:UIControlStateNormal]; [UITabBarItem.appearance setTitleTextAttributes: @{NSForegroundColorAttributeName : [UIColor orangeColor]} forState:UIControlStateSelected]; [[UITabBar appearance] setTintColor:[UIColor whiteColor]]; // for unselected items that are gray [[UITabBar appearance] setUnselectedItemTintColor:[UIColor whiteColor]]; 

La mejor forma de cambiar el color de la barra de tabs seleccionada es agregar un código único en el método appdelegate didFinishLaunchingWithOptions

 UITabBar.appearance().tintColor = UIColor(red: 242/255.0, green: 32/255.0, blue: 80/255.0, alpha: 1.0) 

Cambiará el color del texto del elemento seleccionado

Puede hacerlo a través del constructor de interfaz, verifique esta respuesta, muestra cómo hacer tanto activo como inactivo, “Cambiar el elemento seleccionado de la barra de tabs en un guión gráfico”.

para swift 3:

  // both have to declare in view hierarchy method //(ie: viewdidload, viewwillappear) according to your need. //this one is, when tab bar is selected self.tabBarItem.selectedImage = UIImage.init(named: "iOS")?.withRenderingMode(.alwaysOriginal) // this one is when tab bar is not selected self.tabBarItem.image = UIImage.init(named: "otp")?.withRenderingMode(.alwaysOriginal) 

esto funcionó para mí SWIFT 3

 viewConroller.tabBarItem = UITabBarItem(title: "", image: UIImage(named: "image")?.withRenderingMode(.alwaysOriginal), selectedImage: UIImage(named: "image")) 

Solución Swift : para el elemento NO SELECCIONADO: en cada ViewController -> ViewDidLoad ()

 self.tabBarItem = UITabBarItem(title: nil, image: UIImage(named: "PHOTO_NAME")?.imageWithRenderingMode(.AlwaysOriginal), selectedImage: UIImage(named: "NAME"))