首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在从Firebase更新值后停止reloadData滚动到我的应用程序顶部?

如何在从Firebase更新值后停止reloadData滚动到我的应用程序顶部?
EN

Stack Overflow用户
提问于 2019-02-06 17:52:35
回答 1查看 114关注 0票数 0

我正在与来自Firebase和CollectionViews的观察者合作,用信息填充我的单元格。我的所有数据都正确地显示在我的collectionView上,当我在Firebase中更新完我的帖子中的值时,问题就出现了,应用程序在更新后开始向上滚动,以及复制单元格中的值。

我已经尝试在我使用的大多数常用函数中调用reloadData,但一直滚动到顶部。只有当我用相机拍照时,才会出现重复的单元格。

代码语言:javascript
复制
var postVibe = [PostVibe]()
fileprivate func fetchPostWithUser() {
    guard let uid = Auth.auth().currentUser?.uid else { return }
    guard let city = CityState.currentCity else { return }
    let ref = Database.database().reference().child("vibes").child("city").child(city)
    ref.observe(.value, with: { (snapshot) in
        self.postVibe.removeAll()
        if snapshot.exists() {
            self.collectionView.refreshControl?.endRefreshing()

            guard let vibeDic = snapshot.value as? [String: Any] else { return }
            vibeDic.forEach({ (key, value) in
                guard let newDic = value as? [String: Any] else { return }
                var vibe = PostVibe(postId: key, dictionary: newDic)

                Database.database().reference().child("votes").child(vibe.postId).child(uid).observe(.value, with: { (snapshot) in
                    if snapshot.exists() {

                        if let value = snapshot.value as? Int, value == 1 {
                            vibe.hasVoteUp = true
                            vibe.hasVoteDown = false
                        } else {
                            vibe.hasVoteUp = false
                            vibe.hasVoteDown = true
                        }

                    } else {

                    }
                    self.postVibe.append(vibe)
                    DispatchQueue.main.async {
                        self.collectionView.reloadData()
                    }
                }, withCancel: { (err) in
                    print("Failed to fetch Votes: ", err)
                })
            })

        } else {
            self.collectionView.refreshControl?.endRefreshing()
        }
    }) { (err) in
        print("Failed to fetch Vibes: ", err)
    }
}

我希望我的代码能够删除旧数据,只显示新的数据,包括那些已经更新的数据,我希望复制的单元格不会显示6个单元格,而数据库中只需要3个单元格。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-06 18:28:40

这是我用来滚动tableView的,如果可能的话,你也可以用同样的方法来滚动collectionView。

代码语言:javascript
复制
 let contentOffset = tableView.contentOffset
    tableView.reloadData()
    tableView.setContentOffset(contentOffset, animated: false)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54550696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档