检测UITableView的底部“反弹”

我有一个表视图,当用户在UITableView上向下滚动(按下拇指向上)和不同的animation时,用户执行animation。

问题是当用户到达一个UITableView的底部,它弹跳,表注册一个向上,然后向下移动,从而执行animation,当它不应该。

滚动到顶部时也会发生同样的行为。 不过,我可以像这样检测它:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { self.lastContentOffset = scrollView.contentOffset; } -(void) scrollViewDidScroll:(UIScrollView *)scrollView { // Check if we are at the top of the table // This will stop animation when tableview bounces if(self.tableView.contentOffset.y < 0){ // Dont animate, top of tableview bounce } else { CGPoint currentOffset = scrollView.contentOffset; if (currentOffset.y > self.lastContentOffset.y) { // Downward animation [self animate:@"Down"]; } else { // Upward [self animate:@"Up"]; } self.lastContentOffset = currentOffset; } } 

这完美的作品,但对我的生活,我无法弄清楚如果条件来检测底部以及。 我相信这很简单,我只是无法弄清楚。

怎么样这样的事情:

 if (self.tableView.contentOffset.y >= (self.tableView.contentSize.height - self.tableView.bounds.size.height)) { // Don't animate } 

在今天的时代(Xcode 7),下面的代码应该解决大多数使用情况,因为它解释了UIScrollView(和它的子类UITableView和UICollectionView)insets,多个设备(即大小类)的单个故事板 –

 func scrollViewDidScroll(scrollView: UIScrollView) { if (Int(scrollView.contentOffset.y + scrollView.frame.size.height) == Int(scrollView.contentSize.height + scrollView.contentInset.bottom)) { if !isFetching { isFetching = true fetchAndReloadData(true) } } } 

PS:注意Int()和==对触发一次事件很重要。