這個(gè)應(yīng)該是UITableView最大的改變裤翩。我們知道在iOS8引入Self-Sizing之后腕够,我們可以通過實(shí)現(xiàn)estimatedRowHeight相關(guān)的屬性來展示動態(tài)的內(nèi)容,實(shí)現(xiàn)了estimatedRowHeight屬性后,得到的初始contenSize是個(gè)估算值晦攒,是通過estimatedRowHeight乘以 cell的個(gè)數(shù)得到的逛犹,并不是最終的contenSize端辱,只是當(dāng)前屏幕能夠顯示的cell個(gè)數(shù),滑動時(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屬性的,這樣就會造成contentSize和contentOffset值的變化鸡岗,如果是有動畫是觀察這兩個(gè)屬性的變化進(jìn)行的混槐,就會造成動畫的異常,因?yàn)樵诠浪阈懈邫C(jī)制下轩性,contentSize的值是一點(diǎn)點(diǎn)地變化更新的声登,所有cell顯示完后才是最終的contentSize值。因?yàn)椴粫彺嬲_的行高揣苏,tableView reloadData的時(shí)候悯嗓,會重新計(jì)算contentSize,就有可能會引起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