使用UITableViewDelegate代理方法來設置header或footer時要注意的細節 問題描述 剖析 解決方案

問題描述

使用UITableViewDelegate代理方法來設置headerfooter時要注意了。

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
    return [UIView new];
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return 1;
}
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
    return [UIView new];
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
    return 1;
}

UITableViewUI佈局中使用的場景很多,比如下圖:

使用場景:讓UITableViewcontentSize的高度和父控件的高度一致。

  • 沒有使用分組(即沒有設置headerfooter),這個時候通過獲取UITableViewcontentSize的高度來設置父控件的高度,顯示出來的效果是正常的;
  • ⚠️⚠️使用了分組(即設置了headerfooter),這個時候通過獲取UITableViewcontentSize的高度來設置父控件的高度,顯示出來的效果是不正常的;

剖析

舉例:當我們使用UITableViewDelegate代理方法來設置footer時,先調用
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
然後調用
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
但是當我們設置footer的高度爲0CGFLOAT_MIN時,執行完
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
就不會調用
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section;
所以這個時候通過獲取UITableViewcontentSize的高度來設置父控件的高度,顯示出來的效果是不正常了。

解決方案

當我們使用UITableViewDelegate代理方法來設置headerfooter時,儘量不要給headerfooter的高度設爲0CGFLOAT_MIN,應該設置一個很小的高度,eg12...

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