最近在寫一個聊天的框架,遇到一個奇葩的問題,就是發送聊天記錄的時候(需要tableView上移,顯示出最新的記錄),增加一條記錄無疑需要reload一下(大家都明白的),這是就會出現頭疼的問題,頁面顯示的位置有偏差,並且會出現快閃的的現象(貌似是contentoffset被設置了多次造成的結果)。以下是我的代碼:
這是需要顯示最新記錄,設置的contentoffset值(tableMoveY的值是正確的哦,不必懷疑)
這是增加記錄刷新頁面
貌似是沒有什么問題的,但是......
----------------------------------------------華麗的分割線----------------------------------------
其實一般情況下調用reloadData時tableView的 contentoffset是不會變的,但是如果table里面cell的數目發生的改變,如增加了一個cell,並且無法從重用隊列中找到時,talbeView會重排結構,contentoffset會清零(看清楚了,所以我的頁面會出現快閃的問題)。並且這一過程是需要時間的,如果在上述動作尚未完成之前又去設置與table相關的動畫(例如:
),會引起沖突,從而導致重排后的tableView的布局與預期出現偏差的情況。故,解決上述問題還可將設置tableView的contentoffset的動作延后或者放到UIView的動畫回調中(,因為原理上是一樣的,都避開了tableView本身重排的時間。
在回調里寫這樣其實還是會出現頁面快閃的問題)
所以大家可以將animated動畫設置為NO,反正我的問題是解決咯。。。。你也可以試試