在率先个 Section 的上边拖进来叁个空 UIView 

首先个section上面多余间隔管理

// 隐藏UITableViewStyleGrouped上边多余的间隔
_tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, CGFLOAT_MIN)];

每一个section上边多余间距管理

// 隐藏UITableViewStyleGrouped下边多余的间隔
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    return CGFLOAT_MIN;
}
  • 备考:若传入的 height == 0,则 height 被安装成暗许值
  • 若 height
    小于显示器半像素对应的冲天,则不会被渲染,所以这里再次来到CGFLOAT_MIN,其实重返0.01也是足以的

增补:代码顺序的不如产生第八个section上边现身多余间隔

  • 在装置代理设置tableFooterView,上边会出现剩下间距

tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
tableView.tableFooterView = [UIView new];
tableView.delegate = self;
tableView.dataSource = self;
  • 在装置代理设置tableFooterView,上边不会出现剩余间隔

tableView = [[UITableView alloc]initWithFrame:CGRectZero style:UITableViewStyleGrouped];
tableView.delegate = self;
tableView.dataSource = self;
tableView.tableFooterView = [UIView new];
  • 能够透过第一个section上边多余间距处理的法子来化解因代码顺序招致的上述难题,所以那边建议要减轻第一个section上边多余间距或许通过文章开端所说的消除办法更加好

在 Storyboard 中 0 代码化解

没用 Storyboard 的同班利用方面包车型大巴代码就 OK 了; 而在 Storyboard 中得以 0
代码消除这几个事: 

第生龙活虎,在首先个 Section 的方面拖进来贰个空 UIView 

图片 1

下一场选中那些 UIView 的 Runtime Attributes 栏,加多叁个 frame 的
KeyPath 

图片 2

那样尾部的间距就乖乖的遗失了: 

图片 3

寻根究底 UITableViewHeader 的猫腻

缘何刚才说 0.1 和 CGFLOAT_MIN
是一模二样的吗?经过切磋,那一个中度值的影响大致是这么的:

  1. 若传入的 height == 0,则 height 棉被服装置成默许值
  2. 若 height 小于显示器半像素对应的冲天,那一个 header 不在另一个像素渲染

半像素也正是 1.0 / scale / 2.0,如在 @2x 屏上是 0.25
直观的感想下,借使这几个 height 被安装成 0.5 的楷模:
图片 4

导航栏上边包车型客车阴影线看上去宽了 0.5 像素的,Done。

参照他事他说加以考察随笔

相关文章