iOS5与iOS4的UITableViewCell背景颜色不同
在iOS 5中,分组的UITableViewCell
使用tableCellGroupedBackgroundColor
颜色而不是常规的whiteColor
颜色。因此,自定义单元格的背景与UITableViewCell
(Default,Subtitle,Value1,Value2样式单元格)的背景不匹配。
确保在自定义UITableViewCell
和默认UITableViewCell
(以及相关联的UILabel
和其他元素)中使用相同背景颜色的最佳方法是什么 – 同时iOS4和iOS5?
注意:在编辑器中,我可以通过tableCellGroupedBackgroundColor
的名称看到一种新颜色,但是没有类别/方法可用于以编程方式获取此颜色。
编辑:
您可以使用以下技术更改单元格上控件的背景颜色,但是如果是自定义单元格,您如何根据操作系统设置适当的背景颜色(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; } }
最简单的解决方案(我当前实施):这只是确保我的所有单元格都具有白色背景,无论操作系统如何。 不知何故,我不需要将白色应用于cell.contentView.subviews
。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { [cell setBackgroundColor:[UIColor whiteColor]]; }
这是一种快速而肮脏的方法,假设我们处理的是坚实的背景颜色,没有渐变或类似的东西。
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath { for (UIView *subview in [cell.contentView subviews]) { subview.backgroundColor = cell.backgroundColor; } }
在iOS 5上,它可以帮助避免难看的视线。 🙂
或者,您可以将子视图(标签等)的backgroundColor设置为[UIColor clearColor]
如果你是UITableViewCell
子类,你也可以尝试重写setBackgroundColor
:
- (void)setBackgroundColor:(UIColor *)backgroundColor { [super setBackgroundColor:backgroundColor]; [[self myLabel] setBackgroundColor:backgroundColor]; }
当它为单元格设置默认背景颜色时,iOS会使用此方法。