Pregunta

En mi barra de navegación, tengo un par de BarButtonitems de BarButtone que tienen íconos personalizados (las imágenes de iconos son blancas, que funcionaron bien con el esquema de color básico de iOS 6).

Bajo iOS 7, cargando las imágenes usando InitWithtitle (ver el fragmento de código 1) reemplaza el color "blanco" en el icono con el tinte global adecuado (un color específico de azul oscuro en este caso)

Fragmento de código 1:

UIBarButtonItem *refreshButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:(UIBarButtonItemStyle) UIBarButtonSystemItemCancel target:(self) action:@selector(refreshList)];

refreshButton.image = [UIImage imageNamed:@"RefreshIcon.png"];

Sin embargo, necesitaba usar InitWithCustomView para superar un cambio extraño en el comportamiento que estaba causando que los íconos se alejaran fuera de la vista. La idea básica era establecer específicamente el tamaño de los iconos. InitWithCustomView resolvió el problema de tamaño, pero no muestra las imágenes del botón con el tinte global, se muestran en el color de la imagen (blanco). El fragmento de código 2 muestra cómo estoy creando el botón con InitWithCustomView.

Fragmento de código 2:

CGRect frameCustomButton2 = CGRectMake(0.0, 0.0, 18.0, 18.0);
UIButton *customButton2 = [[UIButton alloc] initWithFrame:frameCustomButton2];
[customButton2 setBackgroundImage:iconRefreshButton forState:UIControlStateNormal];
UIBarButtonItem *barCustomButton2 =[[UIBarButtonItem alloc] initWithCustomView:customButton2 ];
barCustomButton2.image = iconRefreshButton;
[customButton2 addTarget:self action:@selector(refreshList) forControlEvents:UIControlEventTouchUpInside];

Todo este código se encuentra, por supuesto, en (nulo) ViewDidload. He probado cosas como:

barCustomButton2.tintColor = [UIColor blackColor];  //doesn't work

o [Barbuttonappearance settintcolor: [Uicolor BlackColor]]; // no funciona

y no anulan el color blanco de la imagen. ¿Es casi como si la creación de la vista personalizada tenga lugar después de que la vista mira el color de tinte global?

¿Cómo puedo asegurar que el ícono del botón adquiere el tinte global?

¡Gracias!

¿Fue útil?

Solución

Solo quería poner esto en un comentario raíz para dar un mejor contexto a la marca de verificación de "respuesta" y dar un mejor formato.

¡Pude resolver este! Puede decirle a la imagen que siempre represente como plantilla, lo que la obligará a asumir el color global de tinte.

UIImage *iconRefreshButton = [UIImage imageNamed:@"MyIconFilename.png"];
iconRefreshButton = [iconRefreshButton imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

El valor predeterminado, si no lo establece, es "uiimagerenderingModeautomatic", lo que significa que se convertirá en una plantilla o imagen original basada en el contexto.

Otros consejos

Tendrá que solucionar el problema que estaba teniendo con el primer fragmento de código, o tendrá que crear una subclase de Uibutton que use su imagen como máscara para mostrar el color de tinte en drawRect:.

Recomendaría el primer enfoque.

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