瀑布流的加载更多


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


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

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

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


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

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


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

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

至于向容器里放一个还是两个,或者更多个标记,可以计算当前页的Cell距Content尾部的距离,如果足够长,那就放一个,如果太短了,也就意味着马上要滚到底部了,那就多放一些。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值