判断UITableView是否滑动到底部,一般使用下面的方式判断。
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.isDragging {
let offset = scrollView.contentSize.height - scrollView.ma_height
let isScrollBottom = offset < 0 || (offset > 0 && offset <= scrollView.contentOffset.y)
if self.isScrollBottom != isScrollBottom {
self.isScrollBottom = isScrollBottom
if self.isScrollBottom == true {
// 滑动到底部刷新
footerRefresh()
}
}
}
}
但当需要做上拉刷新时,必须TableView滑动到最底部才能刷新,如果刷新数据不及时的话,会出现很短的卡顿情况。
针对这个问题,可以设置 offset - 10,让footerRefresh提前触发,但这不是最优雅的方式。UITableView有个visibleCells属性,咱们可以通过判断界面上显示的最后一个cell所持有的model是不是TableView的数据源中的最后一个model来判断TableView是否滚动到底部。代码如下:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.isDragging, let cell : ChatViewCell = tableView.visibleCells.last as? ChatViewCell, let message = cell.message , let last = tableView.models.last {
let isScrollBottom = message == last
if self.isScrollBottom != isScrollBottom {
self.isScrollBottom = isScrollBottom
}
if self.isScrollBottom == true {
// 滑动到底部刷新
footerRefresh()
}
}
}