【发布时间】:2017-01-06 09:11:04
【问题描述】:
我进行了查询以删除 UITableView 中的指定行,但是当 deleteRows 被称为 UITableView 滚动到顶部时出现问题,那么如何防止它滚动到顶部?以及为什么它会滚动到顶部!
我尝试调用一个方法来强制它向下滚动,但返回后 tableview 首先滚动到顶部 删除代码
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;
}
}
})
【问题讨论】:
-
可能不是您想要的,但您不应该在每个循环范围内都执行删除行。在闭包的第一行创建数组,并添加删除的索引路径。循环结束后,删除添加的数组。
-
有什么区别?除了我的问题是滚动的变化而不是删除本身
-
我在源码中没有发现任何与滚动相关的问题。我怀疑有任何逻辑可以在 cellForRowAt indexPath 或其他地方更新整个表格来设置单元格。拥有完整的代码意味着其他人可以找出确切的原因。没错。这不是原因,但是UITableView在循环中一一运行deleteRows并不是好代码。
-
deleteRows 函数可以接收数组。
标签: ios swift uitableview firebase firebase-realtime-database