ios11 MJRefresh上滑加載后tableView位置移動(dòng)解決方案

這個(gè)應(yīng)該是UITableView最大的改變。我們知道在iOS8引入Self-Sizing之后,我們可以通過實(shí)現(xiàn)estimatedRowHeight相關(guān)的屬性來展示動(dòng)態(tài)的內(nèi)容,實(shí)現(xiàn)了estimatedRowHeight屬性后,得到的初始contenSize是個(gè)估算值,是通過estimatedRowHeight乘以 cell的個(gè)數(shù)得到的,并不是最終的contenSize,只是當(dāng)前屏幕能夠顯示的cell個(gè)數(shù),滑動(dòng)時(shí),tableView不停地得到新的cell,更新自己的contenSize。
Self-Sizing在iOS11下是默認(rèn)開啟的,Headers, footers, and cells都默認(rèn)開啟Self-Sizing,所有estimated高度默認(rèn)值從iOS11之前的 0改變?yōu)閁ITableViewAutomaticDimension:

如果目前項(xiàng)目中沒有使用estimateRowHeight屬性,在iOS11的環(huán)境下就要注意了,因?yàn)殚_啟Self-Sizing之后,tableView是使用estimateRowHeight屬性的,這樣就會(huì)造成contentSize和contentOffset值的變化,如果是有動(dòng)畫是觀察這兩個(gè)屬性的變化進(jìn)行的,就會(huì)造成動(dòng)畫的異常,因?yàn)樵诠浪阈懈邫C(jī)制下,contentSize的值是一點(diǎn)點(diǎn)地變化更新的,所有cell顯示完后才是最終的contentSize值。因?yàn)椴粫?huì)緩存正確的行高,tableView reloadData的時(shí)候,會(huì)重新計(jì)算contentSize,就有可能會(huì)引起contentOffset的變化。

2.解決方案:關(guān)閉默認(rèn)開啟的選項(xiàng)

if #available(iOS 11.0, *) {
self.tableView.contentInsetAdjustmentBehavior = .never
self.tableView.estimatedRowHeight = 0
self.tableView.estimatedSectionFooterHeight = 0
self.tableView.estimatedSectionHeaderHeight = 0
}

參考原文鏈接 https://blog.csdn.net/u012498386/article/details/79552820

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容