轉(zhuǎn): 在 iOS8 引入 Self-Sizing 之后尼变,我們可以通過實現(xiàn)estimatedRowHeight相關(guān)的屬性來展示動態(tài)的內(nèi)容足陨,實現(xiàn)了estimatedRowHeight屬性后,得到的初始contenSize是個估算值,是通過estimatedRowHeight乘以 cell的個數(shù)得到的飞主,并不是最終的contenSize,只是當(dāng)前屏幕能夠顯示的cell個數(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:
如果目前項目中沒有使用estimateRowHeight屬性贰盗,在
[ iOS11~ iOS12 ]
的環(huán)境下就要注意了许饿,因為開啟Self-Sizing之后,tableView是使用estimateRowHeight屬性的舵盈,這樣就會造成contentSize和contentOffset值的變化陋率,如果是有動畫是觀察這兩個屬性的變化進(jìn)行的,就會造成動畫的異常秽晚,因為在估算行高機制下瓦糟,contentSize的值是一點點地變化更新的,所有cell顯示完后才是最終的contentSize值赴蝇。因為不會緩存正確的行高菩浙,tableView reloadData的時候,會重新計算contentSize句伶,就有可能會引起contentOffset的變化劲蜻。
2,解決方案:關(guān)閉默認(rèn)開啟的選項
OC
self.tableView.estimatedRowHeight =0;
self.tableView.estimatedSectionHeaderHeight =0;
self.tableView.estimatedSectionFooterHeight =0;
Swift
tableView?.estimatedRowHeight = 0
tableView?.estimatedSectionHeaderHeight = 0
tableView?.estimatedSectionFooterHeight = 0