Swift 排序时,CollectionView会闪烁未排序的数组
问题就在这里 创建json对象数组后,我对它们进行排序。当我加载控制器时,集合视图会闪烁未排序的数组,然后显示已排序的数组(请参阅下面的演示) 我试过几种解决这个问题的方法Swift 排序时,CollectionView会闪烁未排序的数组,swift,sorting,firebase,firebase-realtime-database,uicollectionview,Swift,Sorting,Firebase,Firebase Realtime Database,Uicollectionview,问题就在这里 创建json对象数组后,我对它们进行排序。当我加载控制器时,集合视图会闪烁未排序的数组,然后显示已排序的数组(请参阅下面的演示) 我试过几种解决这个问题的方法 GCD首先完成排序,然后重新加载集合视图 GCD删除阵列,然后继续请求 分派异步排序和集合视图重新加载 这是我的密码 ref.observeSingleEvent(of: .value, with: { (snapshot) in self.collectionView?.refreshControl
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)
})
})
我真的不知道还能做什么。。有什么想法吗?您告诉集合视图在每次更新后更新其内容(通过调用
reloadData()
)。这会导致闪烁。要防止出现这种情况,请仅在完成所有更新后通知集合视图更新自身:
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()
})
这解决了问题!我还有一个方法,它在一个获取请求中包含一个获取请求。。同样的问题依然存在。。你知道我该怎么解决吗?