gpt4 book ai didi

ios - 如何使 UICollectionView 在将项目添加到顶部时不滚动

转载 作者:行者123 更新时间:2023-11-30 12:59:29 38 4
gpt4 key购买 nike

我终于让我的收藏 View 在更新时不滚动。我想是在我添加这个的时候:

self.collectionView.performBatchAnimated(false, updates: {() -> Void in
self.collectionView.reloadData()
}, completion: { _ in
})

然后我意识到最新的帖子要放在底部,而我希望它们位于顶部。为此,我只是以相反的顺序将它们添加到数组中。现在唯一的问题是,当添加一篇文章并转到顶部时,collectionView 会向下移动一篇文章,因为一篇文章是添加到顶部的。这就是整个事情:

DataService.ds.REF_POSTS.child("\(self.loggedInUser!.uid)").observeEventType(.ChildAdded, withBlock: { postDictionary in
if postDictionary.exists() {
self.posts.insert(postDictionary, atIndex: 0)
}
self.collectionView.performBatchAnimated(false, updates: {() -> Void in
self.collectionView.reloadData()
}, completion: { _ in
})
})

由于这是 Firebase .ChildAdded,因此它会在加载时运行多次,以用所有帖子填充 collectionView,然后在每次添加帖子时再次运行。如何停止自动滚动(1 个屏幕高度)?我尝试使用 setContentOffset 来反向滚动,但问题是我添加的任何代码都将在每个帖子的加载时执行。因此,由于使用过多内存(加载时反复上下滚动 30 多次),应用程序崩溃了。我只需要用户在将帖子添加到 Collection View 顶部时保持其滚动位置。

最佳答案

好的,这是我能做的最好的事情了。重新加载表格时,它仍然会进行一些快速的屏幕闪烁,类似于截取屏幕截图。

        self.posts.insert(postDictionary, atIndex: 0)

self.collectionView.performBatchAnimated(false, updates: {() -> Void in
let currentOffset = self.collectionView.contentOffset.y
let newOffset = currentOffset + self.screenHeight
self.collectionView.setContentOffset(CGPointMake(0, newOffset), animated: false)
self.collectionView.reloadDataImmediately()
}, completion: { _ in
})

这会在顶部插入一个项目,然后计数器滚动,以便用户保持该位置。我尝试了大约 30 多种其他方法来摆脱闪光灯,而我能做到的唯一方法是,如果我以某种方式在不同时间重新加载所有项目,以避开用户当前的滚动位置。如果我这样做,他们最终会看到一些奇怪的行为,比如重复帖子之类的东西,但如果他们去仔细检查,它就会刷新……所以它不会真的那么有效。如果有人知道如何摆脱重新加载时的快速“闪烁”,请告诉我!

我尝试过的一些事情:禁用动画,在不同线程上运行不同的东西,逐一重新加载行,以一种方式重新加载当前行,以不同的方式重新加载其余行,一堆其他我不记得的东西,哈哈。如果有人可以摆脱我当前代码引起的闪光,那么我将选择他们的答案是正确的!

关于ios - 如何使 UICollectionView 在将项目添加到顶部时不滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40013765/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com