2011-10-11 1 views
9

Ho un UITableViewCell raggruppato in modo personalizzato, con un paio di UILabels su di esso. Poiché il colore di sfondo di UITableViewCell era bianco puro, corrispondeva al colore di sfondo predefinito di UILabels, quindi la casella UILabel non era visibile ..Colore cella bg diverso a seconda della versione iOS (da 4.0 a 5.0)

Dopo l'aggiornamento a iOS 5.0, noto che ora il colore di sfondo predefinito per raggruppati UITableViewCells è un bianco più grigiastro (in realtà # f7f7f7), e di conseguenza il frame di UILabels è visibile in modo brutto ..

Quindi, qual è il modo migliore per impostare il colore di sfondo di UILabels quando è necessario varia tra le diverse versioni di iOS? So che potrei usare opaque = NO e [UIColor clearColor], ma preferirei dipingere lo sfondo di UILabels per motivi di prestazioni.

+0

La cosa divertente è che non riesco a riprodurre questo. Ho creato un UITableView raggruppato in modo molto semplice e gli sfondi delle celle hanno lo stesso colore grigiastro in iOS 4 e iOS 5 (sul simulatore). – matt

risposta

4

Nel metodo delegato tableView:willDisplayCell:, il UITableViewCell avrà il colore di sfondo impostato su bianco o, in iOS 5, grigiastro.

È possibile modificare tutte le backgroundColor di tutte le visualizzazioni secondarie.

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

È possibile chiamare:

[[UIDevice currentDevice] systemVersion] 

anche se questo è scoraggiato per un sacco di ragioni, e non sono sicuro che sia il modo migliore per risolvere il problema. In linea di principio, dovresti essere in grado di distribuire il codice di visualizzazione e ottenere i risultati coerenti che desideri con altri mezzi.

Se non vuole realmente confrontare le versioni del dispositivo, si sarebbe probabilmente imposta una proprietà e controllare il sistema operativo del dispositivo quando i carichi View Controller, in contrasto con all'interno cellForRowAtIndexPath ...

1

Quello che ho fatto è stato impostato il colore di sfondo della cella in [UIColor whiteColor] in willdisplaycell ...

In questo modo, controllo le cose.

3

Ho visto che problema nella mia abitudine UITableViewCell in un TableView raggruppati ho appena impostato il colore di sfondo dell'etichetta per cancellare e quello fissato per me e lavora a iOS4 e iOS5. Ho impostato questo nel codice cella personalizzato in cui viene creato UILabel come di seguito:

[nameLabel setBackgroundColor:[UIColor clearColor]]; 

Dopo che il problema è andato.

4

Niente male con la risposta di gcamp, ma se si preferisce mantenere lo sfondo bianco su entrambi iOS4 e iOS5, poi basta fare questo:

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