UITableView 背景颜色设置两次
Posted
技术标签:
【中文标题】UITableView 背景颜色设置两次【英文标题】:UITableView background color getting set twice 【发布时间】:2010-02-16 19:47:20 【问题描述】:我正在尝试创建一个带有 alpha 值的透明表。在我的主循环中,我创建了一个背景图像,将其添加到主窗口,然后创建一个具有透明背景颜色的 UITableView 并将其添加到主窗口。由于某种原因,tableView 背景颜色在带有条目的单元格上设置了两次。 (即有条目的单元格的 alpha 值为 0.8 而不是 0.4)
在我的 UITableView 初始化方法中,这是我拥有的代码
self.tableView.backgroundColor = [UIColor colorWithWhite:1 alpha:0.4];
[self.tableView setNeedsDisplay];
这在大多数情况下都有效,除了一些奇怪的原因,有条目的单元格比没有条目的单元格透明度低
我尝试在我的 cellForRowAtIndexPath 方法中添加以下内容:(为了确定,尝试了所有单元格的子视图)
cell.backgroundView.backgroundColor = [UIColor clearColor];
cell.contentView.backgroundColor = [UIColor clearColor];
cell.textLabel.backgroundColor = [UIColor clearColor];
[cell.backgroundView setNeedsDisplay];
[cell.contentView setNeedsDisplay];
[cell.textLabel setNeedsDisplay];
这并没有解决问题。我在网上进行了广泛的搜索,但似乎没有其他人遇到过这个问题;任何帮助将不胜感激!
【问题讨论】:
【参考方案1】:出于某种原因,UITableView 在tableView:cellForRowAtIndexPath:
委托方法和显示之间重置单元格的背景颜色。
尝试实现tableView:willDisplayCell:forRowAtIndexPath:
并将单元格的背景颜色设置为透明。
表格视图在使用单元格绘制行之前将此消息发送给其委托人,从而允许委托人在单元格对象显示之前对其进行自定义。此方法使委托有机会覆盖先前由表视图设置的基于状态的属性,例如选择和背景颜色。代理返回后,表格视图仅设置 alpha 和 frame 属性,然后仅在行滑入或滑出时设置动画。
【讨论】:
感谢您的回答;不过,我似乎仍然遇到问题.. 我尝试实现 willLDisplayCell:forRowAtIndexPath 并将背景设置为 clearColor,没有任何变化【参考方案2】:如果您可以将背景效果重新定位到 tableView 后面的不同视图,那么您可以将 tableView 的 backgroundColor 设置为 clearColor。这也将用于 contentView。
(请记住,为什么表的默认配置是使用不透明视图是有性能原因的。)
【讨论】:
问题是我希望 backgroundColor 不透明,所以我将它的 alpha 值设置为 0.4。发生的情况是它两次应用不透明度,一次应用于表格背景,一次应用于单元格的内容视图,因此有效单元格的 alpha 为 0.8。【参考方案3】:我遇到了同样的问题,唯一对我有用的是:
tableView.backgroundView = [[[UIView alloc]init]autorelease];
【讨论】:
以上是关于UITableView 背景颜色设置两次的主要内容,如果未能解决你的问题,请参考以下文章
全局设置按钮的背景颜色,除了 UITableView 中的辅助按钮