我有一个 collectionView,我使用 Alamofire 从 api 获取数据(我有 PHP(Laravel) 后端)。我制作了一个像 Twitter 一样的时间线,当我使用拉动刷新它时,它会重新加载所有数据,但它没有用,因为如果有人拉动刷新,他们每次都会滚动到顶部。
我希望他们保持当前的滚动位置,新项目将添加到顶部,当他们滚动到顶部时,他们将继续阅读 Twitter 等帖子。我希望你能明白我的意思。我研究了它,但找不到任何类似的问题,我认为这是因为我不知道如何描述这一点。
供审核的API:https://gasome.com/api/post
我使用 KafkaRefresh pod 进行拉动刷新
self.mCollectionView.bindHeadRefreshHandler({
self.id.removeAll(keepingCapacity: false)
self.loadPosts()
}, themeColor: UIColor.blue, refreshStyle: .native)
最佳答案
您想要使用 UICollectionView 的 performBatchUpdates(_:completion:)
函数。有一些关于如何使用它的教程,我建议您使用 diff 算法,如 https://github.com/wokalski/Diff.swift也是。
读完你的评论后...这是一个很大的问题。这不是一件小事。每次用户滚动并存储它时,您都需要跟踪 Collection View 的内容偏移量。然后,每当用户将屏幕带到前台时,您都必须下载最新的数据,为存储的内容偏移量添加一个值,以表示新数据已添加到屏幕顶部的点数,然后设置 Collection View 内容偏移到该值。
您可能找不到示例代码来向您展示如何执行此操作,因为公司需要花费大量资金才能拥有经验丰富的开发人员设置。
关于ios - 我想将新项目添加到顶部,例如 Twitter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52786139/