適配 iOS 11 是最近工作中的重中之重缩膝,發(fā)現(xiàn)的問題也有很多。
UITableViewStyleGrouped 類型的 tableView 在適配的時(shí)候出現(xiàn)很大的問題岸霹。記錄一下
按照之前的方法疾层,只需要執(zhí)行以下的代碼就能夠很好的解決 section == 0 的時(shí)候,sectionHeader 的高度問題以及 section 間距的問題
tableView.delegate = self;
tableView.dataSource = self;
tableView.tableFooterView = [UIView new];
配合這兩種方法
-(CGFloat)tableView:(UITableView)tableView heightForHeaderInSection:(NSInteger)section { return 10.f};
-CGFloat)tableView:(UITableView)tableView heightForFooterInSection:(NSInteger)section { return 0.01f};
但是贡避,在 iOS 11 上通過這兩種方法已經(jīng)不能解決問題痛黎,通過大量的測(cè)試,始終發(fā)現(xiàn)刮吧,在 iOS 10 以下版本中都能夠解決問題湖饱,但是在 iOS11 上不能夠解決問題,經(jīng)過研究之后發(fā)現(xiàn)杀捻,通過以下的方法能夠良好的解決 sectionHeader 的高度問題井厌,并且是兼容 iOS 10 以及其他版本的
tableView.delegate = self;
tableView.dataSource = self;
tableView.sectionFooterHeight = 0.01f;
tableView.tableFooterView = [UIView new];
- 首先,在實(shí)例化tableView 的時(shí)候致讥,直接聲明 sectionFooterHeight仅仆,不需要寫代理方法
- 聲明 sectionHeaderView 高度的時(shí)候,不能夠再像以前一樣僅僅聲明高度拄踪,而是蝇恶,直接使用比較粗暴的方式,聲明一個(gè) view 出來 惶桐,這樣就能像從前一樣實(shí)現(xiàn)效果
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, ViewWidth, 10.0f)];
return headerView;
}
-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return 10.0f;
}
兩種方法必須同時(shí)寫,不然還是不生效,不知道因?yàn)槭裁匆瑥奶O果的官方文檔還是沒有獲取到關(guān)于footerView 的更多解釋贿衍,猜測(cè)可能還是在 runtime 的時(shí)候,蘋果做了不知道的事情
親測(cè)是這樣的效果救恨,如果大神能夠有更好的解決方式贸辈,希望提供,歡迎拍磚
更新:
昨天晚上比較匆忙肠槽,忘記測(cè)試了兩項(xiàng)比較重要的屬性擎淤,今天更新一下,發(fā)現(xiàn)只要設(shè)置以下屬性秸仙,能夠良好的解決問題
tableView.estimatedSectionHeaderHeight = 0;
tableView.estimatedSectionFooterHeight = 0;
設(shè)置 tableView 的sectionHeader嘴拢、FooterView 的高度之后,就就可以解決高度不準(zhǔn)確的問題
在系統(tǒng)更新之后寂纪,tableView 的 section 的頭尾預(yù)估高度不再是0席吴,官方文檔解釋如下
// default is UITableViewAutomaticDimension, set to 0 to disable
感謝各位大神