8

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

问题是当用户到达 UITableView 的底部并且它反弹时,表格会先向上然后向下移动,从而在不应该执行动画时执行动画。

滚动到顶部时会发生同样的行为;但是,我能够像这样检测到它:

- (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 条件来检测底部。我确信这很简单,我只是想不通。

4

2 回答 2

34

像这样的东西怎么样:

if (self.tableView.contentOffset.y >= (self.tableView.contentSize.height - self.tableView.bounds.size.height)) 
{
    // Don't animate
}
于 2013-08-12T16:27:02.720 回答
0

在当今时代(Xcode 7),下面的代码应该解决大多数用例,因为它考虑了 UIScrollView(以及它的子类 UITableView 和 UICollectionView)插图,用于多个设备的单个故事板(即大小类) -

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() 和 == 对于触发事件一次很重要。

于 2015-10-18T21:55:26.550 回答