Preservación del color de image original de los íconos UITabBar seleccionados y no seleccionados.

La estructura es la siguiente:

En mi storyboard, tengo un Tab Bar Controller que contiene un object de Tab Bar . Este object tiene una class personalizada en la que solo tengo este método:

 - (void)awakeFromNib { NSArray *imageNames = @[@"test1", @"test2", @"test3", @"test4", @"test5"]; for (int i=0; i<5; i++) { UITabBarItem *item = [self.items objectAtIndex:i]; NSString *imageName = [imageNames objectAtIndex:i]; item.image = [[UIImage imageNamed:imageName] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; item.selectedImage = [UIImage imageNamed:[imageName stringByAppendingString:@"-selected"]]; } } 

He creado un Asset Catalog que contiene los icons de mi barra de tabs, tanto las versiones seleccionadas como las no seleccionadas (colors diferentes).

La documentation para UIImageRenderingModeAlwaysOriginal menciona UIImageRenderingModeAlwaysOriginal siempre la image original, sin tratarla como una plantilla. que debe conservar el color de la image original. Esto no parece suceder y esta sugerencia tampoco funcionó.

Lo que sucede en cambio es que, en el estado seleccionado, los icons de mi barra de tabs obtienen el color de tinte azul pnetworkingeterminado.

Una cosa que noté es que si hago lo siguiente (tomado de aquí ) en didFinishLaunchingWithOptions en AppDelegate , entonces puedo configurar el color de los íconos de la barra de tabs seleccionados como quiero:

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

La documentation para setTintColor menciona:

El color de tinte para aplicar a los elementos de la barra de tabs de la barra de tabs. A partir de iOS 7.0, el color de tinte que se aplica a los elementos de la barra de tabs de la barra de tabs es el primer color de tinte no pnetworkingeterminado en la jerarquía de la vista, comenzando con la propia barra de tabs.

¿Significa esto que, independientemente del color de los icons de mi barra de tabs (original en las imágenes), en el estado seleccionado siempre tendrán el color de tintColor ?

¿O estoy haciendo algo mal o faltando algo?

Estoy teniendo este problema en iOS 7.0 y 7.1.

Pregunta perfecta, muy bien explicada.

No está configurando imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal para la image seleccionada.

Simplemente agregue imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal a la image selectedImage :

  item.selectedImage = [[UIImage imageNamed:[imageName stringByAppendingString:@"-selected"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 

Marque esta otra respuesta .

Simplemente vaya a las properties de sus activos de image y establezca Render como propiedad en "image original"

introduzca la descripción de la imagen aquí

¡Y ya estás listo!

Swift 3 :

  for item in self.tabBar.items!{ item.selectedImage = item.selectedImage?.withRenderingMode(.alwaysOriginal) item.image = item.image?.withRenderingMode(.alwaysOriginal) }