1. UITableView 顶部多出空白
大家都知道UITableView是继承自UIScrollView。我们一般很少去设置tableview的contentSize属性,tableview 的contentSize会走tableview 的代理方法动态计算。
有种特殊情况下会导致UITableView多了一块空白区域:项目中用代码去实例化UITableView的时候,如果要设置tableView 的header 的话,请先设置tableView的代理,再设置tableview的header。如果设置header在设置代理之前。就会出现tableview 多了一块空区域。这是一种特殊的情况,很少有人会碰到。
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 50)];
headerView.backgroundColor = [UIColor redColor];
tableView.tableHeaderView = headerView;
tableView.delegate = self;
tableView.dataSource = self;
[self.view addSubview:tableView];
原因是:设置tableview 的header或者footer的时候 tableview会去计算自身contentSize。假设为H1, 会发现H1比实际的header的高度会高一些。这时候再去设置tableview的代理。当tableview走代理方法去计算contentSize 的时候就会在H1的基础上去计算。结果就会导致tableView的contentSize偏高,滑动的底部就会出现空白区域。
2. UITableView 组头空白
iOS15后增加了新的属性 sectionHeaderTopPadding
导致组头会有一个空白
解决办法 :
if (@available(iOS 15.0, *)) {
[UITableView appearance].sectionHeaderTopPadding = 0;
}