2011-10-11 10 views
9

Tengo un UITableViewCell agrupado personalizado, con un par de UILabels en él. Como el color de fondo UITableViewCell solía ser blanco puro, coincidía con el color de fondo predeterminado de UILabels, por lo que el cuadro UILabel no estaba visible.Diferente color de celda BG dependiendo de la versión de iOS (4.0 a 5.0)

Después de actualizar a iOS 5.0, noto que ahora el color de fondo predeterminado para agrupado UITableViewCells es un blanco más grisáceo (en realidad # f7f7f7) y, como consecuencia, el marco de UILabels es visible de manera fea.

Entonces, ¿cuál es la mejor manera de configurar el color de fondo de UILabels cuando sea necesario? varían entre las diferentes versiones de iOS? Sé que podría usar opaque = NO y [UIColor clearColor], pero preferiría pintar el fondo de UILabels por motivos de rendimiento.

+0

Lo curioso es que no puedo reproducir este. Hice una muy sencilla UITableView agrupada y los fondos de las celdas son del mismo color grisáceo en iOS 4 y iOS 5 (en el simulador). – matt

Respuesta

4

En el método delegado tableView:willDisplayCell:, el UITableViewCell tendrá el color de fondo en blanco o, en iOS 5, grisáceo.

Puede cambiar todas sus backgroundColor de todas sus subvistas.

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    for (UIView* view in cell.contentView.subviews) { 
     view.backgroundColor = cell.backgroundColor; 
    } 
} 
1

Usted puede llamar a:

[[UIDevice currentDevice] systemVersion] 

A pesar de que se desanima por muchas razones, y no estoy seguro de que es la mejor manera de resolver su problema. En principio, debería poder implementar código de vista y obtener los resultados consistentes que desee de otra manera.

Si realmente quiere comparar las versiones del equipo, lo que probablemente establece una propiedad y comprobar el sistema operativo del dispositivo cuando se carga el controlador de vista, a diferencia de dentro de su cellForRowAtIndexPath ...

1

Lo que hice fue establecer el color de fondo de la celda para [UIColor whiteColor] en willdisplaycell ...

De esa manera controlo cómo se ven las cosas.

3

vi ese problema en mi costumbre UITableViewCell en un TableView agrupados basta poner la etiqueta de color de fondo para despejar y el fijado por mí y trabaja en iOS4 y iOS5. Me puse esto en el código de celda personalizado donde el UILabel se crea de la siguiente manera:

[nameLabel setBackgroundColor:[UIColor clearColor]]; 

Después de ese problema ha ido.

4

No hay nada malo con la respuesta de gcamp, pero si usted prefiere mantener el fondo blanco tanto en iOS4 y iOS5, a continuación, sólo hacer esto:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { 
    [cell setBackgroundColor:[UIColor whiteColor]]; 
} 
Cuestiones relacionadas