UITableView reload刷新闪动问题

前言

Xcode 13.3.1
iOS 11.3.1

先说下我这遇到的情况,
1、tableView 刷新时候闪动、或者定位出错
2、tableView刷新 + scrollToRow 滚动 闪动

1.1、tablwView预设高度

tableView.rowHeight = UITableView.automaticDimension  //snpkit 自适应高度
tableView.rowHeight = 0  //手动设置高度 
tableView.estimatedRowHeight = UITableView.automaticDimension
tableView.estimatedSectionHeaderHeight = 0
tableView.estimatedSectionFooterHeight = 0

什么?你说上面不行!嗯,我的好像也是不行,那就没事了,在继续添加下一个

1.2、压制reload刷新隐式动画

CATransaction.setDisableActions(true)
tableView.reloadData()
CATransaction.commit()

以上单纯的刷新就不会出问题了

但是我的是上诉情景2,依旧会闪动,使用scrollToRow 滚动动画依然有问题(如果动画设置false就没问题了)

2.1、tableview使用 insertRows 插入而不是reload刷新

使用情景:一个类似聊天的AI互动,发送数据成功后,tableview滑动到这条最新数据上
使用说明:使用CATransaction 压制 insertRows插入动画,然后刷新单独行,刷新单独行不行压制动画,否则会导致部分内容展示失败(原因未知)

let indexPath = IndexPath(row: count - 1, section: 0)
CATransaction.setDisableActions(true)
table.insertRows(at: [indexPath], with: .none)
CATransaction.commit()
table.reloadRows(at: [indexPath], with: .none)
DispatchQueue.main.async {
    
    
    table.scrollToRow(at: indexPath, at: .top, animated: true)
}

什么?你说上面不行!嗯,我的好像也有部分不行,那就没事了,在继续添加下一个

2.2、tabview 频繁刷新闪动问题

使用场景:我这边因为tableView 的cell 中嵌套了另外一个 tableview,里面tableview刷新之后,外边继续刷新,然后继续第三步,就会发生闪动,我取消一个刷新之后,闪动问题解决

多次刷新可能导致闪动

什么?你说上面不行!嗯,才疏学浅,告辞

猜你喜欢

转载自blog.csdn.net/u014651417/article/details/124856804