gpt4 book ai didi

swift - CollectionView 在排序时闪烁未排序的数组

转载 作者:行者123 更新时间:2023-11-28 15:27:34 24 4
gpt4 key购买 nike

问题来了

创建 json 对象数组后,我对它们进行排序。当我加载 Controller 时, Collection View 闪烁未排序的数组,然后呈现排序的数组(请引用下面的演示)。

CollectionView Flicker Problem Demo

我已经尝试了几种方法来解决这个问题。

  1. GCD先完成排序,然后重新加载 Collection View 。

  2. GCD 删除数组,然后继续请求。

  3. 调度异步排序和 Collection View 重新加载。

这是我的代码

  ref.observeSingleEvent(of: .value, with: { (snapshot) in

self.collectionView?.refreshControl?.endRefreshing()

guard let dictionaries = snapshot.value as? [String: Any] else { return }

dictionaries.forEach({ (key, value) in
guard let dictionary = value as? [String: Any] else { return }

var post = Post(user: user, dictionary: dictionary)
post.id = key

self.posts.sort(by: { (p1, p2) -> Bool in
return p1.creationDate.compare(p2.creationDate) == .orderedDescending
})
self.posts.append(post)
self.collectionView?.reloadData()

}, withCancel: { (err) in
print("Failed to fetch like info for post:", err)
})
})

我真的不知道还能做什么。有什么想法吗?

最佳答案

您要告诉 Collection View 在每次更新后更新其内容(通过调用 reloadData())。这会导致闪烁。为防止这种情况,仅在完成所有更新后才告诉 Collection View 更新自身:

ref.observeSingleEvent(of: .value, with: { (snapshot) in

self.collectionView?.refreshControl?.endRefreshing()

guard let dictionaries = snapshot.value as? [String: Any] else { return }

dictionaries.forEach({ (key, value) in
guard let dictionary = value as? [String: Any] else { return }

var post = Post(user: user, dictionary: dictionary)
post.id = key

self.posts.sort(by: { (p1, p2) -> Bool in
return p1.creationDate.compare(p2.creationDate) == .orderedDescending
})
self.posts.append(post)

}, withCancel: { (err) in
print("Failed to fetch like info for post:", err)
})
self.collectionView?.reloadData()
})

关于swift - CollectionView 在排序时闪烁未排序的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45023810/

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