Цвет фона UITableViewCell отличается в iOS5 и iOS4

#ios #uitableview #colors #ios5

#iOS #uitableview #Цвет #ios5

Вопрос:

В UITableViewCell iOS 5 сгруппированный использует tableCellGroupedBackgroundColor цвет вместо обычного whiteColor цвета. В результате фон ваших пользовательских ячеек не совпадает с фоном ячеек UITableViewCell (по умолчанию, субтитры, значение 1, значение 2).

Каков наилучший способ убедиться, что один и тот же цвет фона используется в пользовательских UITableViewCell и стандартных UITableViewCell (а также связанных UILabel и других элементах) — w.r.t. как в iOS4, так и в iOS5?

Примечание: В редакторе я вижу новый цвет по имени tableCellGroupedBackgroundColor , но нет категории / метода, доступного для получения этого цвета программно.

Редактировать:

Вы можете использовать следующую технику для изменения цвета фона элементов управления в вашей ячейке, но в случае пользовательских ячеек, как вы можете установить соответствующий цвет фона в зависимости от ОС (iOS 4 против iOS 5)?

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

Самое простое решение (мое текущее реализованное):
Это просто гарантирует, что все мои ячейки имеют белый фон, независимо от операционной системы. Так или иначе, мне не нужно применять белый цвет cell.contentView.subviews .

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

Ответ №1:

Вот один быстрый и грязный способ сделать это, предполагая, что мы имеем дело со сплошным цветом фона, без градиентов или чего-либо подобного.

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

В iOS 5 это может помочь избежать неприглядных линий просмотра. 🙂

Ответ №2:

В качестве альтернативы вы можете установить фоновый цвет ваших вложенных представлений (ярлыков и т. Д.) На [UIColor clearColor]

Комментарии:

1. Это не очень хорошая идея, потому что установка прозрачного цвета для фона в любом представлении снижает производительность. Если вам не нужен градиентный фон, вам следует установить фон непрозрачным. Это то, что рекомендует Apple, и это также мой опыт…

Ответ №3:

Если вы создаете подкласс UITableViewCell , вы также можете попробовать переопределить setBackgroundColor :

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

Похоже, что этот метод используется iOS, когда он устанавливает цвет фона по умолчанию для ячейки.