2011-10-28 12 views
5

La agrupados UITableViewCell utiliza tableCellGroupedBackgroundColor color en lugar del color regular whiteColor, en iOS 5. Como resultado, el fondo de las células personalizados no coincide con las de UITableViewCell (por defecto, Subtítulo , Value1, Value2 style cells).UITableViewCell color de fondo es diferente en IOS5 vs iOS4

¿Cuál es la mejor manera de asegurarse de que se utiliza el mismo color de fondo en UITableViewCell personalizado y UITableViewCell predeterminado (y asociado UILabel y otros elementos) - w.r.t. tanto iOS4 como iOS5?

Nota: En el Editor puedo ver un nuevo color con el nombre tableCellGroupedBackgroundColor, pero no hay una categoría/método disponible para obtener este color mediante programación.

Editar:

permite utilizar las siguientes técnicas para cambiar el color de fondo de los controles en su celular, pero en el caso de las células personalizados, ¿cómo se puede establecer el color de fondo apropiado basado en el sistema operativo (IOS 4 vs iOS 5)?

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

solución más fácil (implementado mi actual): Esto sólo se asegura de que todas mis células tienen fondo blanco, con independencia del sistema operativo. De alguna manera, no necesito aplicar color blanco al cell.contentView.subviews.

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

Respuesta

3

He aquí una manera rápida y sucia a hacerlo, suponiendo que estamos tratando con un fondo sólido color, sin gradientes ni nada de eso.

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

En iOS 5, puede ayudar a evitar líneas de vista antiestéticas. :)

0

alternativa usted puede ajustar la backgroundColor de sus subvistas (etiquetas, etc) a [UIColor clearColor]

+2

Esto no es una buena idea porque configura el color transparente para el fondo en cualquier vista que reduzca el rendimiento. Si no necesita un fondo degradado, debe configurar el fondo como opaco. Eso es lo que Apple recomienda y esa también es mi experiencia ... –

0

Si subclase UITableViewCell también podría intentar anular setBackgroundColor:

- (void)setBackgroundColor:(UIColor *)backgroundColor { 
    [super setBackgroundColor:backgroundColor]; 
    [[self myLabel] setBackgroundColor:backgroundColor]; 
} 

Parece que este método es utilizado por iOS cuando se establece el color de fondo por defecto para la célula.

Cuestiones relacionadas