У меня есть 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.Я весь потерян.