我有一个带有多个自定义单元格的UITableView。所有类型的单元格的高度都是通过UITableViewAutomaticDimension计算的。

正常滚动时效果很好。但是,当超快滚动时,它返回奇怪的高度。在我滚动并回到它之后,它再次重新正确加载。

我试图检查uitableview是否在快速滚动并重新加载表,如下所示:

func scrollViewDidScroll(scrollView: UIScrollView) {
    if scrollView.panGestureRecognizer.velocityInView(self.view).y < -750
        fastScroll = true
    }
}

func scrollViewDidEndDragging(scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    if fastScroll {
        fastScroll = false
        myTableView.reloadData()
    }
}

尽管这可以正常工作,但我对这种解决方案不满意。有人可以指出正确的解决方案吗?

最佳答案

因此,只有在我插入或删除单元格时才会出现这种异常。我可以通过添加 setNeedsLayout() layoutIfNeeded()来解决此问题

myTableView.beginUpdates()
myTableView.deleteSections(deleteIndexes, withRowAnimation: .None)
myTableView.insertSections(insertIndexes, withRowAnimation: .None)
myTableView.reloadSections(reloadIndexes, withRowAnimation: .None)
myTableView.endUpdates()

myTableView.setNeedsLayout()
myTableView.layoutIfNeeded()

10-07 20:28