重新加载可扩展表视图单元时如何避免闪烁?

时间:2016-12-01 09:26:27

标签: ios uitableview expand flicker

我需要扩展UITableView的单元格,但在执行此操作时我会看到闪烁。

我有这个实现:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

    // Switch row state
    expandedFlags[indexPath.row] = !expandedFlags[indexPath.row]

    UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: { () -> Void in
            tableView.beginUpdates()
            tableView.reloadRows(at: [IndexPath(row: indexPath.row, section: 0)], with: UITableViewRowAnimation.automatic)
            tableView.endUpdates()
        }, completion: nil)
}

有没有办法避免重新加载细胞时轻弹?我已阅读了几篇帖子,但对我的方案不起作用。

2 个答案:

答案 0 :(得分:0)

tableView.beginUpdates()
....
tableView.endUpdates()

已经拥有自己的动画UIView动画,可能会产生闪烁

答案 1 :(得分:0)

您好,在花了很多时间之后,我终于找到了解决方案,可以在您扩展或折叠表视图单元格时停止表视图中的闪烁问题。

在第一步中,您必须获取表视图的当前偏移量,然后停止uiview动画,并告诉表视图您将要更新表视图中的某些行。然后像下面这样传递您当前的索引[IndexPath(row:0,section:3)]。您的表视图就像魅力一样。

let currentOffset = self.tableView.contentOffset
UIView.setAnimationsEnabled(false)
self.tableView.beginUpdates()
self.tableView.reloadRows(at: [IndexPath(row: 0, section: 3)], with: .none)
tableView.endUpdates()
UIView.setAnimationsEnabled(true)
self.tableView.setContentOffset(currentOffset, animated: false)