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,反正我的問題是解決咯。。。。你也可以試試


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM