项目中使用了tableView的下拉加载历史记录功能。其中一个逻辑是这样的:手撒开后,tableView会反弹回顶部,为了让cell复用没问题,设置延迟更新数据源。因为如果在手撒开tableView未反弹时就更新数据源,那么界面最下方的cell数据会根据新数据源来设置,导致错误。这个“延迟”的时间必须保证tableView能及时的反弹回顶部。后来发现设置这个时间并不是多么保险,因为我们无法保证用户下拉tableView的距离有多远,这决定了tableView反弹回顶部用的时间。所以干脆对tableView下拉的距离进行限制。主要的原理是在用户下拉过程中不断判断contentOffset,如果小于某个临界值就用setContentOffset设置contentOffset,从而让用户无法继续下拉,达到限制下拉距离的目的。代码如下:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
//限制下拉的距离为70
if(scrollView.contentOffset.y<-70 && scrollView.isDragging){
[scrollView setContentOffset:CGPointMake(0, -70)];
}
[super scrollViewDidScroll:scrollView];
}
原文地址:http://laynestone.blog.51cto.com/9459455/1730606