UITableView莫名其妙多了一块空白区域

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;
}

你可能感兴趣的:(UITableView莫名其妙多了一块空白区域)