iOS 11 適配(一)UITableViewStyleGrouped 型別 tableView sectionHeader 高度問題

我好喜歡你發表於2017-12-19

適配 iOS 11 是最近工作中的重中之重,發現的問題也有很多。

UITableViewStyleGrouped 型別的 tableView 在適配的時候出現很大的問題。記錄一下

按照之前的方法,只需要執行以下的程式碼就能夠很好的解決 section == 0 的時候,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 上通過這兩種方法已經不能解決問題,通過大量的測試,始終發現,在 iOS 10 以下版本中都能夠解決問題,但是在 iOS11 上不能夠解決問題,經過研究之後發現,通過以下的方法能夠良好的解決 sectionHeader 的高度問題,並且是相容 iOS 10 以及其他版本的

tableView.delegate = self; tableView.dataSource = self; tableView.sectionFooterHeight = 0.01f; tableView.tableFooterView = [UIView new];

  1. 首先,在例項化tableView 的時候,直接宣告 sectionFooterHeight,不需要寫代理方法
  2. 宣告 sectionHeaderView 高度的時候,不能夠再像以前一樣僅僅宣告高度,而是,直接使用比較粗暴的方式,宣告一個 view 出來 ,這樣就能像從前一樣實現效果

-(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; }

兩種方法必須同時寫,不然還是不生效,不知道因為什麼,從蘋果的官方文件還是沒有獲取到關於footerView 的更多解釋,猜測可能還是在 runtime 的時候,蘋果做了不知道的事情

親測是這樣的效果,如果大神能夠有更好的解決方式,希望提供,歡迎拍磚

更新: 昨天晚上比較匆忙,忘記測試了兩項比較重要的屬性,今天更新一下,發現只要設定以下屬性,能夠良好的解決問題

tableView.estimatedSectionHeaderHeight = 0; tableView.estimatedSectionFooterHeight = 0;

設定 tableView 的sectionHeader、FooterView 的高度之後,就就可以解決高度不準確的問題 在系統更新之後,tableView 的 section 的頭尾預估高度不再是0,官方文件解釋如下

// default is UITableViewAutomaticDimension, set to 0 to disable

感謝各位大神

相關文章