您的位置:首页 > 产品设计 > UI/UE

瀑布流的加载更多

2016-06-27 16:19 267 查看
我们做瀑布流,一般使用UICollectionView这种集合视图,当然了,它不仅仅能做瀑布流,根据不同的layout,将各视图collect到一起各种的布局,并能做到视图复用,可谓是非常强大了。

对于加载更多,我们遇到了问题。

1、当下页的数据接在上一页调用reloadData时,如果你正在滚动collectionView,它就会小小的卡顿。

2、如何做到边滑动边加载下边页面,让人感觉一直在滑一直的有数据呢?

对于第一个问题,我们试了各种做法,甚至我们想到了异步渲染,小小卡顿难以避免。

既然难于解决问题,怎么办呢?那就使用鸵鸟策略吧,虽然在滑动,下一页的数据照样加载,只不过不更新UI,当你不滑了,不滚动了,那就把下面的数据更新出来,这样,就没有顿一下的感觉了。由于滚动的时候Runloop的Mode切换为UIEventTrackingRunLoopMode, 所以我们就在NSDefaultRunLoopMode的时候reloadData好了。

对于第二个问题,如果你使用tableView正常的下拉加载更多的话,就一般在当前页拉到底时,触发获取下一页数据,不过呢,做瀑布流可以把加载数据的触发点提前,甚至可以在第一页的第一个cell处加载下一页,然后每一页都如此迭代。

实际上可以不只加载一页,可以选择加载两页,甚至更多,那么,我们就需要一个缓存容器,每到一个加载更多的时机就向这个容器里放一或两个标记数据,当加载完成一页数据就移除一个标记数据,容器中如果有数据,那就不断地加载下一页,直至容器无数据。

至于向容器里放一个还是两个,或者更多个标记,可以计算当前页的Cell距Content尾部的距离,如果足够长,那就放一个,如果太短了,也就意味着马上要滚到底部了,那就多放一些。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息