Cambiar el elemento de la barra de pestañas imagen y color del texto iOS


Aquí está mi barra de pestañas:

introduzca la descripción de la imagen aquí

La siguiente imagen muestra el programa que se está ejecutando y el elemento" NOTICIAS " seleccionado:

introduzca la descripción de la imagen aquí

¡Está claro que el color de la barra está funcionando bien como quiero !

Pero el tintColor solo afecta a la imagen y no al texto.

Además, cuando se selecciona el elemento an (como se ha visto anteriormente, noticias) el color del elemento se vuelve azul! ¿Cómo puedo evitar que esto suceda? Quiero que siga siendo blanco.

Por qué el texto cambia a blanco ¿color cuando está seleccionado pero no cuando está deseleccionado?

Básicamente quiero que el color del elemento y el color del texto sean blancos todo el tiempo.

¿Cómo logro esto? Gracias por cualquier ayuda.

¿Requiere código swift para cada elemento individual?

EDITAR:

introduzca la descripción de la imagen aquí

Author: Greg Peckory, 2015-06-29

17 answers

De los documentos de la clase UITabBarItem:

De forma predeterminada, las imágenes no seleccionadas y seleccionadas son creado automáticamente a partir de los valores alfa en las imágenes de origen. A evitar la coloración del sistema, proporcionar imágenes con Uiimagerendingmodealwaysoriginal.

La clave no es si se usa UIImageRenderingModeAlwaysOriginal, lo importante es cuándo usarlo.

Para evitar el color gris de los elementos no seleccionados, solo tendrá que evitar el sistema coloración para la imagen no seleccionada. Aquí está cómo hacer esto:

var firstViewController:UIViewController = UIViewController()
// The following statement is what you need
var customTabBarItem:UITabBarItem = UITabBarItem(title: nil, image: UIImage(named: "YOUR_IMAGE_NAME")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal), selectedImage: UIImage(named: "YOUR_IMAGE_NAME"))
firstViewController.tabBarItem = customTabBarItem

Como puede ver, le pedí a iOS que aplicara el color original (blanco, amarillo, rojo, lo que sea) de la imagen SOLO para el estado NO SELECCIONADO, y que dejara la imagen tal como está para el estado SELECCIONADO.

Además, es posible que deba agregar un color de tinte para la barra de pestañas con el fin de aplicar un color diferente para el estado SELECCIONADO (en lugar del color azul predeterminado de iOS). Según su captura de pantalla anterior, está aplicando el color blanco para el estado seleccionado:

self.tabBar.tintColor = UIColor.whiteColor()

EDITAR:

introduzca la descripción de la imagen aquí

 54
Author: Kingofmit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-29 14:57:07

Swift 3

Lo hice creando un controlador de tabbar personalizado y agregué este código dentro del método viewDidLoad.

    if let count = self.tabBar.items?.count {
        for i in 0...(count-1) {
            let imageNameForSelectedState   = arrayOfImageNameForSelectedState[i]
            let imageNameForUnselectedState = arrayOfImageNameForUnselectedState[i]

            self.tabBar.items?[i].selectedImage = UIImage(named: imageNameForSelectedState)?.withRenderingMode(.alwaysOriginal)
            self.tabBar.items?[i].image = UIImage(named: imageNameForUnselectedState)?.withRenderingMode(.alwaysOriginal)
        }
    }

    let selectedColor   = UIColor(red: 246.0/255.0, green: 155.0/255.0, blue: 13.0/255.0, alpha: 1.0)
    let unselectedColor = UIColor(red: 16.0/255.0, green: 224.0/255.0, blue: 223.0/255.0, alpha: 1.0)

    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: unselectedColor], for: .normal)
    UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: selectedColor], for: .selected)

¡Funcionó para mí!

introduzca la descripción de la imagen aquí

 56
Author: AMarones,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-28 23:51:36

Swift programáticamente:

Para La Imagen:

custom.tabBarItem = UITabBarItem(title: "Home", image: UIImage(named: "tab_icon_normal"), selectedImage: UIImage(named: "tab_icon_seelcted"))

ForText:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.grayColor()], forState:.Normal)

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState:.Selected)
 42
Author: svmrajesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-11 08:05:04

Swift 3

En primer lugar, asegúrese de haber agregado la clave BOOLEANA "Ver apariencia de barra de estado basada en el controlador" a Info.plist, y establezca el valor en "NO".

Appdelegate.swift

Inserte el código en algún lugar después de " launchOptions:[UIApplicationLaunchOptionsKey: Any]?)- >Bool {"

  1. Cambie el color de la barra de pestañas con el valor de color RGB:

UITabBar.appearance().barTintColor = UIColor(red: 0.145, green: 0.592, blue: 0.804, alpha: 1.00)

O uno de los colores predeterminados de la interfaz de usuario:

UITabBar.appearance().barTintColor = UIColor.white)


  1. Cambie el color del texto de los elementos de la pestaña:

El elemento seleccionado

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

Los elementos inactivos

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

  1. Para cambiar el color de la imagen, creo que el enfoque más fácil es hacer imágenes separadas, una para cada estado.

Si no haces los iconos desde cero, alternar las versiones en blanco y negro es relativamente fácil de hacer en Photoshop.


Adobe Photoshop (casi cualquier versión servirá)

Asegúrese de que la imagen del icono tiene un fondo transparente, y el icono en sí es negro sólido (o cerca).

Abra el archivo de imagen, guárdelo con un nombre de archivo diferente (por ejemplo, exampleFilename-Inverted.png)

En el submenú " Ajustes "en el menú" Imagen":

Haga clic en"Invertir"

Ahora tienes un negativo de tu icono original.

En XCode, establezca una de las imágenes como "Imagen seleccionada" en las Propiedades de la barra de pestañas en su storyboard, y especifique la versión "inactiva" en la imagen "Elemento de barra".

Ta-Da

 11
Author: Andreas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-28 23:59:36

Swift 3

Esto funcionó para mí (en referencia a establecer colores de imagen tabBarItems):

UITabBar.appearance().tintColor = ThemeColor.Blue

if let items = tabBarController.tabBar.items {
        let tabBarImages = getTabBarImages() // tabBarImages: [UIImage]
        for i in 0..<items.count {
            let tabBarItem = items[i]
            let tabBarImage = tabBarImages[i]
            tabBarItem.image = tabBarImage.withRenderingMode(.alwaysOriginal)
            tabBarItem.selectedImage = tabBarImage
        }
    }

Me he dado cuenta de que si se establece la imagen con el modo de representación = .Siempre original, el UITabBar.tintColor no tiene ningún efecto.

 11
Author: Bartosz Olszanowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-29 00:50:51

Swift 4 y Xcode 9.3

La solución que funcionó para mí:

  1. Image setup - desde la Imagen del elemento de la Barra de guion gráfico y la Imagen seleccionada. Para eliminar la superposición de tinte en las imágenes, vaya al catálogo de activos, seleccione la imagen y cambie su modo de representación de la siguiente manera:

modo de renderizado de imágenes

Esto evitará que el componente de la barra de pestañas establezca su tinte de imagen predeterminado.

  1. Text - aquí he creado un simple UITabBarController subclass y en su método viewDidLoad personalizé el color predeterminado y seleccioné el color del texto de la siguiente manera:

    class HomeTabBarController: UITabBarController {
        override func viewDidLoad() {
            super.viewDidLoad()
    
            let appearance = UITabBarItem.appearance(whenContainedInInstancesOf: [HomeTabBarController.self])
            appearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: .black], for: .normal)
            appearance.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: .red], for: .selected)
        }
    }
    

Simplemente establezca esta clase como su clase personalizada de controlador de barra de pestañas en el inspector de identidad en IB.

Voila! Eso es.

 7
Author: Vasil Garov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-07 21:30:27

Intenta añadirlo en AppDelegate.swift (inside application method):

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

// For WHITE color: 
UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)

Ejemplo:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Tab bar icon selected color
    UITabBar.appearance().tintColor = UIColor(red: 0/255.0, green: 0/255.0, blue: 0/255.0, alpha: 1.0)
    // For WHITE color: UITabBar.appearance().tintColor = UIColor(red: 255/255.0, green: 255/255.0, blue: 255/255.0, alpha: 1.0)
    return true
}

Ejemplo:

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

Mi inglés es tan malo! ¡Lo siento! :-)

 6
Author: Fred Sousa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-17 14:44:17

Swift 3.0

Creé el archivo de clase tabbar y escribí el siguiente código

En viewDidLoad:

self.tabBar.barTintColor = UIColor.white
self.tabBar.isTranslucent = true

let selectedColor   = UIColor.red
let unselectedColor = UIColor.cyan

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: unselectedColor,NSFontAttributeName: UIFont(name: "Gotham-Book", size: 10)!], for: .normal)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: selectedColor,NSFontAttributeName: UIFont(name: "Gotham-Book", size: 10)!], for: .selected)

if let items = self.tabBar.items {
    for item in items {
        if let image = item.image {
            item.image = image.withRenderingMode( .alwaysOriginal )
            item.selectedImage = UIImage(named: "(Imagename)-a")?.withRenderingMode(.alwaysOriginal)
        }
    }
}

Después de viewDidLoad:

   override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {

   if(item.title! == "title")
   {
    item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }
    if(item.title! == "title")
    {
        item.selectedImage = UIImage(named: "(Imagname)-a")?.withRenderingMode(.alwaysOriginal)

    }

}

En el método view did load, debe establecer la imagen seleccionada y otra imagen se muestra con RenderingMode y en los métodos de delegado de la barra de pestañas, configure la imagen seleccionada según el título

 4
Author: Amol Pokale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-28 23:53:35

Puede establecer el color del tinte de UIBarItem:

UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.magentaColor()], forState:.Normal)
UITabBarItem.appearance().setTitleTextAttributes([NSForegroundColorAttributeName: UIColor.redColor()], forState:.Selected)
 2
Author: Sunil Prajapati,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-09 05:48:01

Desde aquí .

Cada elemento de la barra de pestañas tiene un título, una imagen seleccionada, una imagen no seleccionada y un valor de insignia.

Utilice el campo Image Tint (selectedImageTintColor) para especificar el color del tinte del elemento de la barra cuando se seleccione esa pestaña. Por defecto, ese color es azul.

 1
Author: vp_gold,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-11 11:11:28

Para Swift 4.0 , ahora se cambia como:

tabBarItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.gray], for: .normal)
tabBarItem.setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.blue], for: .selected)

No tiene que subclasificar el UITabBarItem si su requisito es solo cambiar el color del texto. Simplemente coloque el código anterior dentro de la función viewDidLoad de su controlador de vista.

Para la configuración global cambie tabBarItem a UITabBarItem.appearance().

 1
Author: Eric Yuan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-26 12:11:51

También puede hacer de esta manera:

override func viewWillLayoutSubviews() {  
  if let items = self.tabBar.items {
    for item in 0..<items.count {
      items[item].image = items[item].image?.withRenderingMode(.alwaysOriginal)
            items[item].selectedImage = items[item].selectedImage?.withRenderingMode(.alwaysTemplate)
    }

Opcional:

 UITabBar.appearance().tintColor = UIColor.red

Espero que te ayude.

 1
Author: V D Purohit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-08 08:54:24

Este Código funciona para Swift 4 si desea cambiar la imagen del elemento de la Barra de pestañas cuando se presiona. Copiar y pegar en el primer método viewDidLoad que se hitted en el proyecto

Let arrayOfImageNameForSelectedState: [String] = ["Image1Color", "Image2Color", " Image3Color"] let arrayOfImageNameForUnselectedState: [String] = ["Image1NoColor","Image2NoColor","Image3NoColor"]

    print(self.tabBarController?.tabBar.items?.count)

    if let count = self.tabBarController?.tabBar.items?.count {
        for i in 0...(count-1) {
            let imageNameForSelectedState   = arrayOfImageNameForSelectedState[i]
            print(imageNameForSelectedState)
            let imageNameForUnselectedState = arrayOfImageNameForUnselectedState[i]
            print(imageNameForUnselectedState)
            self.tabBarController?.tabBar.items?[i].selectedImage = UIImage(named: imageNameForSelectedState)?.withRenderingMode(.alwaysOriginal)
            self.tabBarController?.tabBar.items?[i].image = UIImage(named: imageNameForUnselectedState)?.withRenderingMode(.alwaysOriginal)
        }
    }
 1
Author: Daniel Valenzuela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-27 22:54:30

Simplemente agregue una nueva referencia de UITabBarController al proyecto.A continuación, cree una referencia de UITabBar en este controlador:

@IBOutlet weak var appTabBar: UITabBar!

En su viewDidLoad () , simplemente agregue a continuación para el color del texto del título :

    appTabBar.tintColor = UIColor.scandidThemeColor()

Para la imagen

    tabBarItem = UITabBarItem(title: "FirstTab", image: UIImage(named: "firstImage"), selectedImage: UIImage(named: "firstSelectedImage"))
 0
Author: Shobhit C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-22 09:37:38

Subclase su TabbarViewController y en viewDidLoad ponga este código:

 [UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor darkGreyColorBT]} forState:UIControlStateNormal];
    [UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor nightyDarkColorBT]} forState:UIControlStateSelected];

    self.tabBar.items[0].image  = [[UIImage imageNamed:@"ic-pack [email protected]"]  imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[0].selectedImage  = [[UIImage imageNamed:@"[email protected]"]  imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[1].image = [[UIImage imageNamed:@"ic-sleeptracker [email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[1].selectedImage  = [[UIImage imageNamed:@"[email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[2].image = [[UIImage imageNamed:@"ic-profile [email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
    self.tabBar.items[2].selectedImage  = [[UIImage imageNamed:@"[email protected]"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

Esta es la solución de trabajo más simple que tengo

 0
Author: coolcool1994,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-26 06:41:50

Swift 4: En tu UITabBarController cámbialo por este código

tabBar.unselectedItemTintColor = .black
 0
Author: Mixon McLaren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-24 15:17:48

En Swift 4.2:

UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.white], for: .normal)
UITabBarItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.red], for: .selected)
 0
Author: Vinu Jacob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-27 06:04:30