像按下的按钮将UICollectionView跳到顶部

时间:2019-04-14 04:48:42

标签: swift firebase-realtime-database uicollectionview

我有一个UICollectionView,其中包含一个UIImageView,TextView,两个按钮(如Button和report Button)。从Firebase Realtime数据库中查询collectionView中的数据。当用户单击“赞”按钮时,该按钮将变为红色,而当用户再次单击该按钮时,其将再次变为白色(透明)。在firebase数据结构中,每个帖子都会有一个相似的节点,该节点是一个字符串数组。它将保留用户的UID,以确保用户是否已经喜欢该帖子。

一切工作都很好,但是突然之间,当用户单击likeButton时,视图滚动跳到顶部,用户必须再次向下滚动。在我将构建版本提交给应用商店之前,这并没有发生,并且正在等待开发者发布(Apple批准),即使经过测试飞行经过Apple认证的构建版本也给出了相同的错误(我确定不是这样)之前给出此错误)。我还在Xcode中返回了许多检查点,但仍然是相同的错误。我很困惑为什么会发生此错误。

Xcode在日志中显示以下错误

WebClient webClient = WebClient.create("https://remoteServer");
MultiValueMap<String, ResponseCookie> myCookies = new LinkedMultiValueMap<String, String>()

webClient
  .post()
  .uri("uri/login")
  .body(Mono.just(myLoginObject), MyLogin.class)
  .exchange()
  .subscribe(r -> 
      for (String key: r.cookies().keySet()) {
        myCookies.put(key, Arrays.asList(r.cookies().get(key).get(0).getValue()));
      }
   );

webClient
  .post()
  .uri("/uri/data")
  .cookies(cookies -> cookies.addAll(myCookies))
  .body(....)
  .exchange();

当我尝试在UIcollectionView上添加View时遇到此问题。 但是在删除视图后解决了问题。我还回滚到仍然面对该问题的先前检查点。

我累了

workIntervalStart: startTimestamp > targetTimestamp; rolling forward by 1.283333

配置CollectionViewCell

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

LikeButtonPressed

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
            }


        }
    }

addSubtractLike方法

   @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)

                }
            }

    }

CollectionView cellForItemAtIndexPath方法

    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)

    }

一切正常,唯一的问题是,当用户单击“按钮”时,UI会跳至如何停止该按钮的顶部。为什么会这样?

我可能的想法 我认为这可能是由于用户按赞按钮时的Firebase查询 可能是由于从Firebase加载大量数据所致。 我迷路了。

0 个答案:

没有答案