UITableViewCell 的背景设置在滚动时重置

Posted

技术标签:

【中文标题】UITableViewCell 的背景设置在滚动时重置【英文标题】:UITableViewCell's background settings are reset on scroll 【发布时间】:2016-10-16 12:01:04 【问题描述】:

我的项目中有一个 UITableView 控制器。所以我做了一个 UITableViewCell 设置,如下所示:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

    cell.textLabel?.text = "Section: \(indexPath.section). Row: \(indexPath.row)."

    if indexPath.row % 2 == 1 
        cell.backgroundColor = UIColor.gray
    

    return cell

如果我的 tableview 的单元格的索引不能被 2 整除,我希望它们是灰色的。

当tableview出现时,一切都完美了!但是当我上下滚动时,单元格的颜色开始变为灰色。

所以最后我所有的单元格都是灰色的。

这里有一些图片:

before

after

【问题讨论】:

【参考方案1】:

尝试添加else 语句,因为单元格被重复使用。

else 
    cell.backgroundColor = UIColor.white

【讨论】:

非常感谢!)这太容易了!):D @AlexVihlayev 没问题,伙计。 :)【参考方案2】:

问题是您从未将背景设置回白色。由于单元格被重复使用,因此在某些时候您将所有单元格设置为灰色。相反,您应该在每次重用单元格时检查行索引:

cell.backgroundColor = indexPath.row % 2 == 0 ? UIColor.white : UIColor.gray

【讨论】:

【参考方案3】:

因为tableview重用了单元格

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

cell.textLabel?.text = "Section: \(indexPath.section). Row: \(indexPath.row)."

if indexPath.row % 2 == 1 
    cell.backgroundColor = UIColor.gray
else
    cell.backgroundColor = YOUR_COLOR

return cell

编辑:Gellert Lee 首先回答了这个问题,而且非常简单

【讨论】:

以上是关于UITableViewCell 的背景设置在滚动时重置的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 上的 PFImageView 断断续续的滚动

swift:如何使用 InfiniteScrolling 设置 UITableViewCell 显示全屏(允许分页)

UITableViewCell 背景图片滚动后消失

在插入 uitableViewCell 时保持滚动

在uitableviewcell背景颜色上快速更改标签

滚动后 UITableViewCell 内的 UIView 中的渐变发生了变化