Swift Note

兴趣是最好的老师

UITableViewCell 重复数据残缺的问题

今天遇到的问题,tableviewcell 的问题还是蛮多啊。

场景:

  • 静态数据或动态数据
  • 多个 cell 重复展现这些数据
  • 其中一个 cell 要做差异化,一般是第一个 cell

于是,渲染出来的 cell,有些会展示残缺不全的内容,而且还是有规律的,比如,比如,第 5n 个 cell ,也就是第 5、10、15、20 个 cell 出问题。

原因据说是 iOS 将这些 cell 的数据缓存了起来,所以滚动的时候并没有 repaint cells,于是出现了这样的bug。呃, repaint 貌似是前端的术语。。。理解就好了

解决方案:

对差异化的cell使用不同的 reuseIdentifier

override func viewDidLoad() {  
        super.viewDidLoad()

        let nibName = UINib(nibName: "customViewCell", bundle: nil)
        tableView.registerNib(nibName, forCellReuseIdentifier: firstCellId)
        tableView.registerNib(nibName, forCellReuseIdentifier: cellId)
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {  
        let cellIndex = indexPath.row
        if cellIndex == 0{
            let firstCell = tableView.dequeueReusableCellWithIdentifier(firstCellId, forIndexPath: indexPath) as? dayViewCell

            // other code

            return firstCell!

        }else{
            let cell = tableView.dequeueReusableCellWithIdentifier(cellId, forIndexPath: indexPath) as? dayViewCell

            // other code

            return cell!
        }

神飞

没有什么能够阻挡,我对自由的向往