Нажатие кнопки «Нравится» переводит UICollectionView наверх - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть UICollectionView, который состоит из UIImageView, TextView, 2 кнопок (кнопка «Мне нравится» и кнопка отчета).Данные в collectionView запрашиваются из базы данных Firebase Realtime.Когда пользователь нажимает кнопку «Мне нравится», кнопка становится красной, а когда пользователь нажимает кнопку снова, она снова становится белой (прозрачной).В структуре данных Firebase каждый пост будет иметь похожий узел, представляющий собой массив строк.Он будет содержать UID пользователя, чтобы удостовериться, понравился ли ему уже пост или нет.

Все работало нормально полностью, но внезапно, когда пользователь нажимает кнопку LikeButton, прокрутки представления переходят ксверху и пользователи должны снова прокрутить вниз.Этого не происходило до того, как я отправил сборку в магазин приложений, и она находится в ожидании релиза разработчика (одобрен Apple), и даже сборка, одобренная Apple, проверенная во время тестового полета, выдает ту же ошибку (которую я точно знаю, что не былодавая эту ошибку раньше).Я также отправил много контрольных точек назад в XCode, все еще та же самая ошибка.Я запутался, почему возникает эта ошибка.

Xcode показывает следующую ошибку в журнале

workIntervalStart: startTimestamp > targetTimestamp; rolling forward by 1.283333

Однажды я столкнулся с этой проблемой, когда попытался добавить View over UIcollectionView.Но решил проблему после того, как я удалил вид.Я также откатился на предыдущую контрольную точку, все еще сталкивающуюся с проблемой.

Я устал

collectionView.scrollsToTop = false
collectionView.scrollToPossition method
collectionView.contentOffset method

Настроить CollectionViewCell

func configureCell(fact: Facts, IndexPath: IndexPath){
        facts = fact
        indexP = IndexPath
        imageView.sd_setShowActivityIndicatorView(true)
        imageView.sd_setImage(with: URL(string: fact.factsLink))
        let likes = fact.factsLikes
        if likes == nil {
            likeLable.text = "0"
        } else {
            likeLable.text = String(fact.factsLikes.count)
        }

        captionTextView.text = fact.captionText
//        ProgressHUD.dismiss()
        let factsRef = Database.database().reference().child("Facts").child(fact.categories).child(facts.factsId).child("likes")
        factsRef.observeSingleEvent(of: .value) { (snapshot) in
            if fact.factsLikes.contains(self.currentUser!){
                self.likeButton.isSelected = true
            } else {
                self.likeButton.isSelected = false
            }


        }
    }

LikeButtonPressed

   @IBAction func likeButtonPressed(_ sender: Any) {

            let factsRef = Database.database().reference().child("Facts").child(facts.categories).child(facts.factsId).child("likes")
            likeButton.transform = CGAffineTransform(scaleX: 0.6, y: 0.6)

            UIView.animate(withDuration: 3.0,
                           delay: 0,
                           usingSpringWithDamping: CGFloat(0.30),
                           initialSpringVelocity: CGFloat(5.0),
                           options: UIView.AnimationOptions.allowUserInteraction,
                           animations: {
                            self.likeButton.transform = CGAffineTransform.identity
            },
                           completion: { Void in()  }
            )


            factsRef.observeSingleEvent(of: .value) { (snapshot) in
                if self.likeButton.isSelected == true {
                    self.likeButton.isSelected = false
                    self.facts.addSubtractLike(addLike: false)
                } else {
                    self.likeButton.isSelected = true
                    self.facts.addSubtractLike(addLike: true)

                }
            }

    }

метод addSubtractLike

    func addSubtractLike(addLike: Bool){
        let currentUser = Auth.auth().currentUser?.uid
        if addLike{
            factsLikes.append(currentUser!)
        } else {
            factsLikes.removeAll{$0 == currentUser}
        }
        let factsRef = Database.database().reference().child("Facts").child(categories).child(factsId).child("likes")

        factsRef.setValue(factsLikes)

    }

Метод CollectionView cellForItemAtIndexPath

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let facts = factsArray[indexPath.row]
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "newCellTrial", for: indexPath) as? NewCellCollectionViewCell

        cell?.configureCell(fact: facts, IndexPath: indexPath)
        cell?.infoButton.addTarget(self, action: #selector(reportButtonPressed), for: .touchUpInside)
        likeButton = cell?.likeButton

       ProgressHUD.dismiss()

        FactsFeverCustomLoader.instance.hideLoader()
        return cell!
    }

все работает, как и ожидалось, единственная проблема заключается в том, что когда пользователь нажимает кнопку «Нравится», пользовательский интерфейс показывает, как это остановить.И почему это происходит?.

Мое возможное мышление Я чувствую, что это может быть связано с запросом на основе Firebase, когда пользователи нажимают кнопку «Мне нравится». Возможно, из-за «Тяжелых» данных для загрузки с базы данных Firebase.Я весь потерян.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...