如何设置UITableViewCell的背景色
我创建了一些在表视图里重复使用的单元格。所有的这些单元格内部都有不同的UILabel以及UIImageView(没有什么覆盖完整的单元格)。
在IB里设置背景色没效果(总是白色的或透明的,具体也说不清是哪一种)。但是如果按命令-R(模拟器界面),单元格在模拟器里就有正确的背景色了。
我尝试在tableView:cellForRowAtIndexPath里设置,但是跟我预期的一样不起作用。
这能制造个假象:
1
cell.contentView.backgroundColor = [UIColor redColor];
但是没有效果(即使我设置了cell.contentView.backgroundColor为clearColor):
2
cell.backgroundView.backgroundColor = [UIColor redColor];
cell.backgroundColor = [UIColor redColor];
我都是在IB里设置布局/字体/背景色,为什么这次不起作用呢?
为什么我要修改contentView的backgroundColor,而不是backgroundView的呢?
这好像是个常见的问题。有谁能指导我一下如何控制表示图单元格的背景色呢?
答案:
为了改变单元格的背景色,你需要修改willDisplayCell:forRowAtIndexPath:方法,这在UITableViewCell documentation
里提到过、所以你需要:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
cell.backgroundColor = [UIColor redColor];
}
contentView 仅仅是建议 subview 放入自定义控件,这样单元格能在表格编辑时适当的布局。
drekka
我发现this Cocoa With Love article
很有用,因为这看起来是一个完全定制的表视图,并且介绍了怎么做。
russes
还有一个简单的解决方案:当你在界面生成器里创建UITableViewCell的时候,仅仅拖拽一个额外的UIView,这样就能覆盖IB里创建的所有UITableViewCell。在额外添加的UIView的顶部放置额外添加的UI元素,你可以将额外的UIView设置成任何你想要的背景色。
StackOverflow上有很多答案建议你通过使用代码改变UITableViewCell的背景色,就像下面的这个:
1
cell.contentView.backgroundColor = [UIColor redColor];
如果你通过轻微调整contentView的框架大小来给单元格增加阴影,你或许会发现这行代码会同时改变单元格的背景色和阴影区域。