Как остановить прокрутку reloadData в начало моего приложения после обновления значений из Firebase? - PullRequest
0 голосов
/ 06 февраля 2019

Я работаю с Наблюдениями из Firebase и CollectionViews, чтобы заполнить мои ячейки информацией.Все мои данные отображаются правильно в моем collectionView, проблема возникает, когда я заканчиваю обновление значений из моего поста в Firebase, приложение начинает прокручиваться вверх после обновления и также дублирует значения в ячейках.

Я уже пытаюсь вызвать reloadData в большинстве общих функций, которые я использую, но продолжает прокручиваться до самого верха.Дублированные клетки появляются только тогда, когда я сделал фотографию с моей камерой.

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, что в базе данных.

1 Ответ

0 голосов
/ 06 февраля 2019

Это то, что я использовал для прокрутки tableView, вы можете использовать то же самое для collectionView, если это возможно.

 let contentOffset = tableView.contentOffset
    tableView.reloadData()
    tableView.setContentOffset(contentOffset, animated: false)
...