UITableViewで指定された行を削除するクエリを作成しましたが、deleteRowsをUITableViewというスクロールで呼び出すと問題が発生するので、スクロールするのを防ぐ方法を教えてください。なぜそれが上にスクロールするのか!私はコードのリターン 後の最初のトップに下にスクロールし、それを強制する方法が、テーブルビューのスクロールと呼ばれてみてくださいUITableViewのデリータが上にスクロールする
は
FIRDatabase.database().reference().child("messages").child(self.roomId).observe(.childRemoved, with: {(snap) in
print("child Removed")
for msg in self.messageArray {
let message: NSDictionary = msg as! NSDictionary
let messageContent: [String: Any] = message as! [String: Any]
if messageContent["messageID"] as! String == snap.key {
let indexRemoved = self.messageArray.index(of: msg)
self.messageArray.remove(msg)
self.userArray.removeObject(at: indexRemoved)
let indexPath = IndexPath(row: indexRemoved, section: 0)
print(indexPath)
self.conversationTableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.none)
break;
}
}
})
は、それは正確にあなたが望んでいるものではありませんが、あなたはすべてのループスコープで削除行をしてはならないかもしれません。クロージャの最初の行に配列を作成し、削除のindexpathを追加するだけです。ループの終了後、追加された配列で削除してください。 –
違いは何ですか?私の問題の他にスクロールの変更は削除自体ではありません –
ソースでスクロール関連の問題が見つかりませんでした。私は、cellForRowAt indexPathや他の場所でテーブル全体を更新してセルを設定するロジックがあると思われます。全体のコードを持つことは、他人が正確な原因を把握できることを意味します。 そして右。これは原因ではありませんが、UITableViewがループ内でdeleteRowsを1つずつ実行するコードは良くありません。 –