最近在写聊天功能的时候,发现了一个很神奇的bug,困扰我半天。
就是在使用scrollToRow的时候,我想将聊天页面滚动到聊天的最底部。
如果没有新消息,直接滚,那是正常的。
但如果是发送消息或者收到消息,需要在tableview的最底部添加一个新cell。
那么问题就来了,最新的一条消息只能显示一小部分,也就是说srollToRow没有将页面正确滚动到最后一行。
于是我一顿研究。
终于找到了问题所在。
在有新消息新增的时候,会调用reloaddata()方法,然后再滚动。
然而在实际运行中,scrollToRow往往是比较着急的,它还没有等到reloaddata方法运行完成,就已经迫不及待的运行了。
因此就导致新增消息的高度还没有正确返回,就已经触发了scrollToRow方法了。
那么我们就必须保证reloaddata方法完成之后,再运行scrollToRow方法。
强制重绘
self.tableView.reloadData()
self.tableView.layoutIfNeeded()
//自定义方法
self.tableView.scrollToBottom()