我正在创建一个聊天界面。
将用户的消息放入新的UITable视图单元格中。
更新表视图时,我使用以下代码。
extension UITableView {
func scrollToBottom() {
let rows = self.numberOfRows(inSection: 0)
if rows > 0 {
let indexPath = IndexPath(row: rows - 1, section: 0)
self.scrollToRow(at: indexPath, at: .bottom, animated: true)
}
}
}
实际上这效果好一点,但有些奇怪。
当我关闭应用并再次打开它,或退出屏幕并再次进入后,会出现以下问题。
问题在于,当我添加一个新单元格时,它会上升到表格视图中的第一个单元格并返回到最后一个单元格。
查看问题(https://vimeo.com/266821436)
随着细胞数量的增加,滚动变得太快而且太乱了。
我只想继续更新新注册的最后一个单元格。
我该怎么办?
答案 0 :(得分:1)
self.scrollToRow(at:indexPath.last ...)
答案 1 :(得分:0)
尝试使用viewDidAppear()
或viewWillAppear()中的代码,并按原样使用您的代码。
<强>更新强>
func scrollToBottom(_ animated: Bool) {
let y: CGFloat = self.tblchat.contentSize.height
self.tblchat.setContentOffset(CGPoint(x: 0, y: y), animated: animated)
}
答案 2 :(得分:0)
请使用DispatchQueue滚动,因为使用tableView加载数据执行的方法是火灾,所以我们需要花时间滚动。
extension UITableView {
func scrollToBottom() {
let rows = self.numberOfRows(inSection: 0)
if rows > 0 {
DispatchQueue.main.async {
let indexPath = IndexPath(row: rows - 1, section: 0)
self.scrollToRow(at: indexPath, at: .bottom, animated: true)
}
}
}
}
或
func scrollToBottom(){
DispatchQueue.main.async {
let indexPath = IndexPath(row: self.array.count-1, section: 0)
self.tableView.scrollToRow(at: indexPath, at: .bottom, animated: true)
}
}