滚动到表格底部时如何添加“加载更多”页面
Posted
技术标签:
【中文标题】滚动到表格底部时如何添加“加载更多”页面【英文标题】:How to add "Load more" page when scrolling to bottom of table 【发布时间】:2013-08-01 17:03:44 【问题描述】:我正在尝试找出在 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];
我不确定如何解决这个问题。任何帮助都会很棒。提前致谢。
【问题讨论】:
如果您不想重新发明***,请查看开源github.com/samvermette/SVPullToRefresh,它可以让您通过 1 行代码实现无限滚动。或者查看文件 UIScrollView+SVInfiniteScrolling.m ,它将向您展示实现。 【参考方案1】:下面的 sn-p 将检测用户是否滚动到滚动视图的底部。 您可以在 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
【讨论】:
【参考方案2】:您的解决方案存在几个缺陷:
首先,您不应该使用 scrollViewDidScroll,因为它会在整个滚动过程中不断触发。对于这种功能,我一直更喜欢 scrollViewDidEndDecelerating,每个滚动手势只会触发一次。
其次,您当前正在验证用户在 scrollView.frame.size.height 或低于底部以重新加载。因此,如果您的 scrollView 是带有导航栏和状态栏的全屏视图,则此值在 iPhone 4 上为 416px,在 iPhone 5 上为 664px - 这是相当多的。我建议您比较 distanceFromBottom 哪个低得多的硬编码值,例如 100。
【讨论】:
谢谢回答。是的,我知道,但是当我滚动而不是在底部时,它会加载,我滚动,我加载...,所以,当我滚动到底部时,我想要加载。你有一些例子吗? P/S:对不起我的英语。【参考方案3】:Here is a demo(感谢原作者!),您可以轻松将其集成到您自己的项目中!
用法:
_footer = [MJRefreshFooterView footer];
_footer.scrollView = self.tableView;
_footer.beginRefreshingBlock = ^(MJRefreshBaseView *refreshView)
// Load more data
;
【讨论】:
以上是关于滚动到表格底部时如何添加“加载更多”页面的主要内容,如果未能解决你的问题,请参考以下文章
uicollectionview 在底部滚动加载更多数据。 iOS 斯威夫特
滚动到页面底部 100px 时,jQuery 加载内容,触发多个事件