问题说明:
对于行高(rowHeight),section头尾高度(sectionHeaderHeight \ sectionFooterHeight)固定的table可以在初始化table的时候就设定其值.
初始化后设置table相关属性代码如下:

1
2
3
4
5
6
7
8
// 禁用预估高度
_table.estimatedRowHeight = 0;
_table.estimatedSectionHeaderHeight = 0;
_table.estimatedSectionFooterHeight = 0;
// 实际高度
_table.rowHeight = 149.f;
_table.sectionFooterHeight = 10.f;
_table.sectionHeaderHeight = CGFLOAT_MIN;

此时在导航栏底部留有一高度为35pt的空白区域, 如下图:

group样式下table留白问题

解决方案:

初始化时给table添加高度为CGFLOAT_MIN的头部视图(最优)

1
2
CGRect rect = CGRectMake(0, 0, 0, CGFLOAT_MIN);
_table.tableHeaderView = [[UIView alloc] initWithFrame:rect];

设置table的内容内边距 contentInset

1
_table.contentInset = UIEdgeInsetsMake(-35.f, 0, 0, 0);

实现返回sectionHeaderHeight的代理函数,并返回 CGFLOAT_MIN

1
tableView:heightForHeaderInSection: -> CGFLOAT_MIN

原因猜测:
UITableViewStyleGrouped 样式的table会默认添加一个高度为35pt的表头视图(tableHeaderView),而sectionHeaderHeight仅对每个Section的头部视图起作用

验证: 在table添加到父视图后打印其 tableHeaderView
结论: tableHeaderView值为nil