在 Storyboard 中 0 代码搞定

没用 Storyboard 的同学使用上面的代码就 OK 了; 而在 Storyboard 中可以 0 代码搞定这个事: 

首先,在第一个 Section 的上面拖进来一个空 UIView 

UITableViewStyleGrouped模式下多余间距_第1张图片

然后选中这个 UIView 的 Runtime Attributes 栏,添加一个 frame 的 KeyPath 

UITableViewStyleGrouped模式下多余间距_第2张图片

这样头部的间隔就乖乖的不见了: 

UITableViewStyleGrouped模式下多余间距_第3张图片

刨根问底 UITableViewHeader 的猫腻

为什么刚才说 0.1 和 CGFLOAT_MIN 是等效的呢?经过研究,这个高度值的影响大概是这样的:

  1. 若传入的 height == 0,则 height 被设置成默认值
  2. 若 height 小于屏幕半像素对应的高度,这个 header 不在另一个像素渲染

半像素也就是 1.0 / scale / 2.0,如在 @2x 屏上是 0.25
直观的感受下,假如这个 height 被设置成 0.5 的样子:
UITableViewStyleGrouped模式下多余间距_第4张图片

导航栏下面的阴影线看上去宽了 0.5 像素的,Done。

参考文章