UITableView的頭視圖重用問題

小編前段時間接到需求需要實現一個類似於QQ好友列表展開關閉的表視圖,實現後debug模式測試發現在滾動列表的時候以及收到通知刷新表視圖數據的時候一直在新建headerView,並沒有達到重用的效果。

小編在排查各種原因無果後,差點都要放棄了。。。今天一個偶然的機會,我把之前練手的項目QQ好友列表打開開始調試。打開其中一個分組之後,再次滾動表視圖則不會再新建headerView了。如下圖所示:

打開第一個分組的QQ好友列表視圖
QQ好友分組

控制檯打印結果表示沒有再新建headerView。這個發現讓小編興奮不已🥰。然後,針對這種業務場景下該怎麼處理全都沒有展開的情況下headerView重用問題?小編如果有解決方案會後續更新到文中來

 

後續更新

小編今天發現tableView重用機制和表視圖高度有莫大的關係,如果是自定義的UITableViewCell,那麼cell的高度必須滿足下面兩個條件之一:

  • 高度固定,那rowHeight應確定爲具體數值。
  • 自適應高度的情況下約束設置好的前提下,rowHeight需設置爲UITableViewAutomaticDimension,estimateRowHeight需設置爲一個具體數值,但是必須小於rowHeight。比如說點擊展開關閉的cell,關閉的時候是44高度。那麼estimateRowHeight應設置爲小於等於44。如果是無法確定高度的cell,estimateRowHeight建議設置爲1。

根據以上條件設置好了以後,無論是滾動,還是刷新tableView。都不會無止境的創建UITableViewCell了。😁

如果是自定義的UITableHeaderFooterView的話,首先這個view可重用的前提是自身滿足上面的兩個條件之一。然後還有一點很重要的是這個view所在tableview的cell也必須要滿足上面的兩個條件之一。如此才能實現滾動亦或者是刷新tableView都能重用該view。

疑惑🤔

最後說回到上面QQ好友列表的例子,點擊分組展開/關閉時依然會創建新的headerView,這個小編還得研究一下啊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章