Swift 排序时,CollectionView会闪烁未排序的数组

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

问题就在这里

创建json对象数组后,我对它们进行排序。当我加载控制器时,集合视图会闪烁未排序的数组,然后显示已排序的数组(请参阅下面的演示)

我试过几种解决这个问题的方法

  • GCD首先完成排序,然后重新加载集合视图

  • GCD删除阵列,然后继续请求

  • 分派异步排序和集合视图重新加载

  • 这是我的密码

      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()
    })
    

    这解决了问题!我还有一个方法,它在一个获取请求中包含一个获取请求。。同样的问题依然存在。。你知道我该怎么解决吗?