不同的细胞bg颜色取决于iOS版本(4.0到5.0)

我有一个自定义分组的UITableViewCell,上面有几个UILabel。 由于UITableViewCell背景颜色曾经是纯白色,因此它与UILabels的默认背景颜色相匹配,因此UILabel框不可见。

更新到iOS 5.0后,我注意到现在分组的UITableViewCells的默认背景颜色是一个更灰色的白色(实际上是#f7f7f7),因此UILabels的框架以丑陋的方式可见。

那么,当需要在不同的iOS版本之间变化时,设置UILabels背景颜色的最佳方法是什么? 我知道我可以使用opaque = NO和[UIColor clearColor],但出于性能原因,我更愿意绘制UILabels的背景。

在委托方法tableView:willDisplayCell:UITableViewCell将背景颜色设置为白色,或者在iOS 5中为灰色。

您可以更改所有子视图的所有backgroundColor

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

gcamp的答案没有错,但是如果你更喜欢在iOS4和iOS5上保持背景白色,那么就这样做:

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

我在分组TableView中的自定义UITableViewCell中看到了这个问题我只是将标签背景颜色设置为清除并为我修复它并在iOS4和iOS5中工作。 我在自定义单元格代码中设置了这个,其中UILabel被创建如下:

  [nameLabel setBackgroundColor:[UIColor clearColor]]; 

在那个问题消失之后。

你可以打电话:

  [[UIDevice currentDevice] systemVersion] 

虽然由于很多原因而不鼓励,但我不确定这是解决问题的最佳方法。 原则上,您应该能够部署视图代码并通过其他方式获得所需的一致结果。

如果你确实想要比较设备版本,你可能会设置一个属性并在视图控制器加载时检查设备的操作系统,而不是在你的cellForRowAtIndexPath中…

我做的是在willdisplaycell中将单元格的背景颜色设置为[UIColor whiteColor] …

这样我就可以控制事物的外观。