UITableView 设置成style:UITableViewStyleGrouped模式的时候,第一个section距离导航栏会有一段空白,如图
CGRect rect2 = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
self.tableView = [[UITableView alloc] initWithFrame:rect2 style:UITableViewStyleGrouped];
self.tableView.backgroundColor = [UIColor orangeColor];
self.tableView.dataSource = self;
self.tableView.delegate = self;
这里其实是一个被 UITableView 默认填充的 HeaderView。而且,当试图将它的高度设置为 0 时,完全不起效果。但我们用下面的代码创建一个高度特别小的 HeaderView 时,上面的边距就不见了:
[self.tableView setContentOffset:CGPointMake(0, 64)];
CGRect frame = CGRectMake(0, 0, 0, CGFLOAT_MIN);
self.tableView.tableHeaderView = [[UIView alloc]initWithFrame:frame];
CGFLOAT_MIN 这个宏表示 CGFloat 能代表的最接近 0 的浮点数,64 位下大概是 0.000225(300左右个)
0.1 和 CGFLOAT_MIN 效果是一样的,这个高度值的影响大概是这样的:
若传入的 height == 0,则 height 被设置成默认值
若 height 小于屏幕半像素对应的高度,这个 header 不在另一个像素渲染
半像素也就是 1.0 / scale / 2.0,如在 @2x 屏上是 0.25
直观的感受下,假如这个 height 被设置成 0.5 的样子:
导航栏下面的阴影线看上去宽了 0.5 像素
但是还有一个问题就是需要兼容刷新控件,比如MJRefresh,只要添加这句代码即可:
self.automaticallyAdjustsScrollViewInsets = NO;