點擊sectionHeader頭部下拉展示列表內(nèi)容,點擊收起聘惦,類似QQ某饰、微信的好友列表。
在項目也有這種類似的展示點擊頭部sectionHeader 來展示數(shù)據(jù)的方式善绎,做法很簡單黔漂,利用一個屬性來標(biāo)志section是否展開(opend),利用
- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
來刷新section。我的demo中比較簡單禀酱,就是一個section中一個cell炬守,所以展開的section中cell數(shù)量為1(同理,可以拓展為多個cell)剂跟。
在 iOS11之前展示正常劳较,最近項目在適配iOS11,發(fā)現(xiàn)了在這個tableView中關(guān)于點擊sectionHeader頭部時候浩聋,會出現(xiàn)sectionHeader 重疊的現(xiàn)象。原本為了適配關(guān)于tableView的在iOS 11中默認(rèn)啟用Self-Sizing臊恋,在每原本代碼基礎(chǔ)上衣洁,初始化返回一個footerView和headerView,在其他的頁面沒出現(xiàn)問題。
//ios 11
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
return [[UIView alloc] init];
}
但在這里需要用戶手動更新section的時候抖仅,這樣就會造成contentSize和contentOffset值的變化坊夫,如果是有動畫是觀察這兩個屬性的變化進(jìn)行的,就會造成動畫的異常撤卢,因為在估算行高機制下环凿,contentSize的值是一點點地變化更新的,所有cell顯示完后才是最終的contentSize值放吩。因為不會緩存正確的行高智听,tableView reloadData的時候,會重新計算contentSize,就有可能會引起contentOffset的變化到推。
所以為了維護(hù)原本的效果考赛,這里采取的是關(guān)閉Self - Sizing
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;