我有一个collectionView和Im通过Alamofire从api获取数据(我有PHP(Laravel)后端)。我创建了一个类似于twitter的时间轴,当我使用pull刷新刷新其重新加载所有数据时,但是它没有用,因为如果有人通过刷新刷新,它们将每次滚动到顶部。
我希望他们将保持当前滚动位置,并且新项目将添加到顶部,并且当他们向顶部滚动时,他们将继续阅读诸如twitter之类的帖子。希望您能理解我的意思。我对其进行了研究,但找不到类似的问题,因为我不知道该如何描述。
供审核的API:https://gasome.com/api/post
我正在使用KafkaRefresh窗格进行拉动刷新
self.mCollectionView.bindHeadRefreshHandler({
self.id.removeAll(keepingCapacity: false)
self.loadPosts()
}, themeColor: UIColor.blue, refreshStyle: .native)
答案 0 :(得分:0)
您要使用UICollectionView的performBatchUpdates(_:completion:)
函数。有一些关于如何使用它的教程,我建议您也使用像https://github.com/wokalski/Diff.swift这样的差异算法。
阅读您的评论后...这是一个很大的问题。这不是一件简单的事情。每次用户滚动并存储时,您都需要跟踪集合视图的内容偏移量。然后,每当用户将屏幕移到前台时,您都必须下载最新数据,在存储的内容偏移量中添加一个值,以获取新数据已添加到屏幕顶部的点数,然后设置集合查看偏移到该值的内容。
您可能找不到示例代码来演示如何执行此操作,因为这是公司为拥有经验丰富的开发人员设置而付出的高昂代价。