iOS11 -- 關于點擊sectionHeader頭部展示下拉cell重疊處理

點擊sectionHeader頭部下拉展示列表內容,點擊收起,類似QQ、微信的好友列表。

QQ好友列表.jpeg

在項目也有這種類似的展示點擊頭部sectionHeader 來展示數據的方式,做法很簡單,利用一個屬性來標志section是否展開(opend),利用

- (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);

來刷新section。我的demo中比較簡單,就是一個section中一個cell,所以展開的section中cell數量為1(同理,可以拓展為多個cell)。

在 iOS11之前展示正常,最近項目在適配iOS11,發現了在這個tableView中關于點擊sectionHeader頭部時候,會出現sectionHeader 重疊的現象。原本為了適配關于tableView的在iOS 11中默認啟用Self-Sizing,在每原本代碼基礎上,初始化返回一個footerView和headerView,在其他的頁面沒出現問題。

//ios 11
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return [[UIView alloc] init];
}

但在這里需要用戶手動更新section的時候,這樣就會造成contentSize和contentOffset值的變化,如果是有動畫是觀察這兩個屬性的變化進行的,就會造成動畫的異常,因為在估算行高機制下,contentSize的值是一點點地變化更新的,所有cell顯示完后才是最終的contentSize值。因為不會緩存正確的行高,tableView reloadData的時候,會重新計算contentSize,就有可能會引起contentOffset的變化。


重疊.jpeg

所以為了維護原本的效果,這里采取的是關閉Self - Sizing

self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
正常.jpeg

參考:

你可能需要為你的APP適配iOS11

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • iOS 11 為整個生態系統的 UI 元素帶來了一種更加大膽、動態的新風格。 本文介紹iOS11中在UI方面做了哪...
    阿凡提說AI閱讀 600評論 0 1
  • 前言 蘋果WWDC開發者大會上,終于發布了大家期待已久的iOS 11,有些新特性功能確實出人意料。不過大的方面蘋果...
    Mr_Say_Yes閱讀 3,340評論 6 15
  • 作者:zombieEngineer鏈接:http://www.lxweimin.com/p/ef423efd5650...
    KingLionsFrank閱讀 747評論 2 1
  • 本文為作者原創,未經作者允許不得轉載。該文同時發表在騰訊bugly公眾號:https://mp.weixin.qq...
    sonialiu閱讀 101,663評論 74 283
  • 最近迷上了這個小孩兒 我想到了一件事,應該把之前所有寫過的博客全列個表。有的才寫過三條吧。自戀和戀愛是我寫東西的兩...
    fe33be1aa229閱讀 255評論 0 0