Невозможно установить цвет фона UITableViewCell в IB
Я создал группу ячеек, которые я повторно использую в виде таблицы. Все эти ячейки имеют разные UILabel
внутри них, а некоторые UIImageView
(ничто не покрывает полную ячейку).
Установка цвета фона в IB не влияет (всегда белый или прозрачный, не может сказать, какой из них). Но если я нажимаю Command-R (имитировать интерфейс), ячейка имеет правильный фоновый цвет в симуляторе.
Я попытался установить его в tableView:cellForRowAtIndexPath:
, но он не работает, как я думал.
Это трюк:
cell.contentView.backgroundColor = [UIColor redColor];
но они не действуют (даже если я установил cell.contentView.backgroundColor
в clearColor
):
cell.backgroundView.backgroundColor = [UIColor redColor];
cell.backgroundColor = [UIColor redColor];
Я установил все элементы макета/шрифта/фона в IB. Любая идея, почему это не работает в этом случае?
Почему мне нужно изменить contentView
backgroundColor
, а не backgroundView
?
Кажется, это обычная проблема. Может кто-нибудь, пожалуйста, укажите мне в правильном направлении (наконец) понять, как цвета фона обрабатываются в ячейке представления таблицы.
Ответы
Ответ 1
Там проще: когда вы создаете UITableViewCell
в Interface Builder, просто перетащите дополнительный UIView
, чтобы он охватывал весь UITableViewCell
, который вы создаете в IB. Поместите дополнительные элементы пользовательского интерфейса поверх этого дополнительного UIView
. Вы можете установить этот дополнительный UIView
в любой фон, который вам нравится.
В StackOverflow есть несколько ответов, в которых предлагается изменить цвет фона вашего UITableViewCell
с помощью строки кода, подобной этой:
cell.contentView.backgroundColor = [UIColor redColor];
Если вы добавите тень в ячейку, слегка изменив размер флага contentView
, вы можете обнаружить, что эта строка изменит цвет фона вашей ячейки и цвет вашей области тени.
Ответ 2
Чтобы изменить цвет фона ячейки, вы должны сделать это в willDisplayCell:forRowAtIndexPath:
метод. Это упомянуто в документации UITableViewCell в нижней части обзора. Итак, вам нужно:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.backgroundColor = [UIColor redColor];
}
ContentView - это просто рекомендуемое подпредставление для размещения пользовательских элементов управления, чтобы ячейка правильно планировалась при редактировании таблицы.
Ответ 3
Я нашел этот Cocoa с любовью статьи действительно полезен, поскольку он смотрит на полностью настроенное представление таблицы и как это сделать.