問題一:
1)iOS11 中 UITableView setContentOffset 方法結(jié)果不準(zhǔn)確,
會導(dǎo)致 footer 添加不上势腮,在IOS11以下的系統(tǒng)是可以的联贩。
2)IOS11 中自定義區(qū)頭會和自定義的cell 重用,導(dǎo)致頁面顯示混亂捎拯。
解決:
原因分析:
以上問題都是因為IOS11中引入自動估算行高的機(jī)制Self-Sizing引起的,并且IOS11默認(rèn)是開啟的。
因為動畫是觀察這兩個屬性的變化進(jìn)行的署照,如果代碼中有用到就會造成動畫的異常祸泪,因為在估算行高機(jī)制下,contentSize的值是一點點地變化更新的建芙,所有cell顯示完后才是最終的contentSize值没隘。因為不會緩存正確的行高,tableView reloadData的時候禁荸,會重新計算contentSize右蒲,就有可能會引起contentOffset的變化。
解決:可以通過以下代碼關(guān)閉Self-Sizing 就可以解決以上問題赶熟。
if (@available(iOS 11.0, *)) {//關(guān)閉Self-Sizing
self.contentTable.estimatedRowHeight = 0;
self.contentTable.estimatedSectionFooterHeight = 0;
self.contentTable.estimatedSectionHeaderHeight = 0;
}
問題二:
iOS11 中 給 tableview添加區(qū)頭和區(qū)尾 只實現(xiàn) :
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section ;
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section;
無論height 設(shè)置多大 瑰妄,添加的footer 都無法顯示。
解決:
必須實現(xiàn)以下這個代理
不實現(xiàn)
-(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return [[UIView alloc]init];
}
最后給大家推薦個不錯的公眾號 "說神碼"映砖,或者大家可以掃描下面的二維碼關(guān)注
