#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, когда он устанавливает цвет фона по умолчанию для ячейки.