1

我试图找出在 UItableView 中滑动到底部时处理分页或“加载更多...”的最佳方法。我正在从 Web 服务加载这些数据,这非常灵活,给了我页面大小和页面参数。Pagesize 定义了每次拉回的结果数量,而 page 参数定义了搜索结果组,例如:

page=1(返回结果 1-10)。

page=2(返回结果 11-20)

每次,当向下滚动到底部时,我向服务器请求 1 次,服务器会给我 1 页(1、2、3、4 ....)和结果。我试着像这样加载

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat height = scrollView.frame.size.height;

    CGFloat contentYoffset = scrollView.contentOffset.y;

    CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset;
    if(distanceFromBottom < height)
    {
        //to do something
        [self.viewController getPics];
    }

}

我不确定如何解决这个问题。任何帮助都会很棒。提前致谢。

4

3 回答 3

1

下面的代码片段将检测用户是否滚动到滚动视图的底部。
您可以在 if 语句的主体中调用该方法以从服务器(异步)获取更多数据。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    if ([scrollView contentOffset].y == [scrollView contentSize].height - [scrollView frame].size.height) {
        // The user did scroll to the bottom of the scroll view
    }
}
于 2013-08-01T17:24:45.043 回答
0

您的解决方案存在几个缺陷:

  • 首先,您不应该使用scrollViewDidScroll,因为它会在整个滚动过程中不断触发。对于这种功能,我一直更喜欢scrollViewDidEndDecelerating,每个滚动手势只会触发一次。

  • 其次,您当前正在验证用户是否在scrollView.frame.size.height或从底部开始重新加载。因此,如果您的 scrollView 是带有导航栏和状态栏的全屏视图,则此值在 iPhone 4 上为 416px,在 iPhone 5 上为 664px - 这是相当多的。我建议您比较distanceFromBottom一个低得多的硬编码值,例如 100。

于 2013-08-01T17:17:42.380 回答
0

这是一个演示(感谢原作者!),您可以轻松地将其集成到您自己的项目中!

用法:

_footer = [MJRefreshFooterView footer];
_footer.scrollView = self.tableView;
_footer.beginRefreshingBlock = ^(MJRefreshBaseView *refreshView) {
    // Load more data
};
于 2014-04-22T03:42:27.093 回答