Table Views :在iOS 11中默認(rèn)啟用Self-Sizing
這個(gè)應(yīng)該是UITableView最大的改變敛瓷。我們知道在iOS8引入Self-Sizing 之后,我們可以通過實(shí)現(xiàn)estimatedRowHeight相關(guān)的屬性來展示動態(tài)的內(nèi)容熄守,實(shí)現(xiàn)了estimatedRowHeight屬性后,得到的初始contenSize是個(gè)估算值,是通過estimatedRowHeight x cell的個(gè)數(shù)得到的,并不是最終的contenSize弊琴,tableView不會一次性計(jì)算所有的cell的高度了,只會計(jì)算當(dāng)前屏幕能夠顯示的cell個(gè)數(shù)再加上幾個(gè)杖爽,滑動時(shí),tableView不停地得到新的cell紫皇,更新自己的contenSize慰安,在滑到最后的時(shí)候,會得到正確的contenSize聪铺。
如果目前項(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的變化。iOS11下不想使用Self-Sizing的話仔沿,可以通過以下方式關(guān)閉:
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;