UITableView在设置contentOffset的同时也reload,造成tableView的contentOffset偏差

最近在写一个聊天的框架,遇到一个奇葩的问题,就是发送聊天记录的时候(需要tableView上移,显示出最新的记录),增加一条记录无疑需要reload一下(大家都明白的),这是就会出现头疼的问题,页面显示的位置有偏差,并且会出现快闪的的现象(貌似是contentoffset被设置了多次造成的结果)。以下是我的代码:

这是需要显示最新记录,设置的contentoffset值(tableMoveY的值是正确的哦,不必怀疑)

这是增加记录刷新页面

 

 

貌似是没有什么问题的,但是......

----------------------------------------------华丽的分割线----------------------------------------

 

其实一般情况下调用reloadData时tableView的 contentoffset是不会变的,但是如果table里面cell的数目发生的改变,如增加了一个cell,并且无法从重用队列中找到时,talbeView会重排结构,contentoffset会清零(看清楚了,所以我的页面会出现快闪的问题)。并且这一过程是需要时间的,如果在上述动作尚未完成之前又去设置与table相关的动画(例如:

),会引起冲突,从而导致重排后的tableView的布局与预期出现偏差的情况。故,解决上述问题还可将设置tableView的contentoffset的动作延后或者放到UIView的动画回调中(,因为原理上是一样的,都避开了tableView本身重排的时间。

 

在回调里写这样其实还是会出现页面快闪的问题)

所以大家可以将animated动画设置为NO,反正我的问题是解决咯。。。。你也可以试试

posted @ 2016-09-22 16:12  一枚IT女  阅读(6491)  评论(1编辑  收藏  举报