iOS UITableView Cell和 SectionHeader 的呼叫順序

weixin_33797791發表於2018-01-03

又是 UITableView 老生長談了。。但是今天遇到了一個之前沒遇到的問題

這篩選列表並不難,只是有個小坑 按照常規順序

  1. 先搞好資料來源
  2. 弄好 cell 和 sectionheaderview

先思考個問題

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
複製程式碼

在有組頭檢視且每組都有cell 的情況下,這兩個方法呼叫順序是如何的 事實是,先呼叫 cell 的,再呼叫 sectionheader 的如此,然後瞬間懵逼,因為有個需要對齊的地方,如果說 章節裡面有 第*章之類的東西的話,需要對齊後面的內容。然後解決方案是 弄一個 Dict 儲存 {section:@(startX)},這樣的話你會發現,第一個分組的顯示有問題但是之後的分組操作的時候正常,這是因為 開始 預設展開第一個分組,然後再展開其他分組的時候 section對應的 startX 已經有了一個正確的值,所以是正確的。為此,可專門在 tableView reloadData 之前,呼叫一次 - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section section 為0,先混存一波 section = 0 時的 startX 的值。

如此,便是正常的介面了。

相關文章