2011-10-28 11 views
5

zgrupowanych UITableViewCell wykorzystuje tableCellGroupedBackgroundColor kolor zamiast zwykłej whiteColor kolorze, w iOS 5. W rezultacie, tło komórek niestandardowych nie zgadza się z tymi UITableViewCell (domyślnie podtytuł , Value1, Value2).UITableViewCell kolor tła jest inny w iOS5 vs iOS4

Jaki jest najlepszy sposób, aby upewnić się, że ten sam kolor tła jest używany w niestandardowym UITableViewCell i domyślnie UITableViewCell (i powiązane z nim UILabel i innymi elementami) - w.r.t. zarówno iOS4, jak i iOS5?

Uwaga: W edytorze widzę nowy kolor o nazwie tableCellGroupedBackgroundColor, ale nie ma kategorii/metody, która mogłaby programowo uzyskać ten kolor.

Edit:

można użyć następujących technik, aby zmienić kolor tła kontroli na swojej komórce, ale już w przypadku niestandardowych komórek, w jaki sposób można ustawić odpowiedni kolor tła w oparciu o system operacyjny (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; 
    } 
} 

Najprostszym rozwiązaniem (mój obecny wdrożone): To właśnie gwarantuje, że wszystkie moje komórki mają białe tło, niezależnie od systemu operacyjnego. W jakiś sposób nie muszę stosować białego koloru do cell.contentView.subviews.

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

Odpowiedz

3

Oto jeden szybki i-brudny sposób to zrobić, zakładając, że mamy do czynienia z jednolitym tle kolor, brak wzniesień lub coś w tym stylu.

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

W systemie iOS 5 pomaga uniknąć nieestetycznych widoków linii. :)

0

Alternatywnie można ustawić backgroundColor swojego subviews (etykiety itp) na [UIColor clearColor]

+2

To nie jest dobry pomysł, ponieważ ustawienie przezroczystego koloru tła dla dowolnego widoku spowalnia wydajność. Jeśli nie potrzebujesz tła gradientowego, powinieneś ustawić tło jako nieprzezroczyste. To właśnie zaleca Apple i to także moje doświadczenie ... –

0

Jeśli podklasy UITableViewCell można także spróbować nadrzędnymi setBackgroundColor:

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

Wydaje się, że ta metoda jest stosowana przez iOS gdy ustawia domyślny kolor tła komórki.