我有一个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加载大量数据所致。 我迷路了。