Ios “探测底部”;“反弹”;UITableView

Ios “探测底部”;“反弹”;UITableView,ios,uitableview,uiscrollviewdelegate,Ios,Uitableview,Uiscrollviewdelegate,我有一个表视图,当用户在UITableView上向下滚动(向上推拇指)时执行动画,当用户在UITableView上向上滚动(向下推拇指)时执行不同的动画 问题是,当用户到达UITableView的底部时,它会反弹,表格会先向上然后向下移动,从而在不应该的时候执行动画 当滚动到顶部时,同样的行为也会发生;但是,我能够像这样检测到它: - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { self.lastCont

我有一个表视图,当用户在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;

    }

}
-(void)scrollView将开始拖动:(UIScrollView*)scrollView{
self.lastContentOffset=scrollView.contentOffset;
}
-(无效)scrollViewDidScroll:(UIScrollView*)scrollView{
//检查一下我们是否在桌子的最上面
//这将在tableview反弹时停止动画
if(self.tableView.contentOffset.y<0){
//不设置动画,桌面视图顶部反弹
}否则{
CGPoint currentOffset=scrollView.contentOffset;
if(currentOffset.y>self.lastContentOffset.y){
//向下动画
[自动设置动画:@“向下”];
}否则{
//向上
[自动设置动画:@“向上”];
}
self.lastContentOffset=当前偏移量;
}
}

这是完美的,但就我的一生而言,我无法找出一个条件来探测底部。我相信这很简单,我就是想不出来

像这样的东西怎么样:

if (self.tableView.contentOffset.y >= (self.tableView.contentSize.height - self.tableView.bounds.size.height)) 
{
    // Don't animate
}
在当今时代(Xcode 7),下面的代码应该解决大多数用例,因为它考虑了UIScrollView(及其子类UITableView和UICollectionView)插入,多个设备的单一情节提要(即大小类)-


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

就是这样!我可以发誓我试过了,但很有可能我把操作人员搞糟了。谢谢!您需要考虑contentInset。如果设置为大于零的值,这将不起作用。改为使用此选项:
if(self.tableView.contentOffset.y-self.tableView.contentInset.bottom>=self.tableView.contentSize.height-self.tableView.bounds.size.height)
。此外,这适用于UIScrollView的所有子类(UICollectionView和UITableView)。这不适用于情节提要和大小类。在这里检查我的答案。
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)
        }
    }
}