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(或简单地说,表视图)的一个实例是用于显示和编辑分层列出的信息的一种手段 <<...
    无邪8阅读 13,654评论 3 3
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,797评论 8 265
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,795评论 1 32
  • 概述在iOS开发中UITableView可以说是使用最广泛的控件,我们平时使用的软件中到处都可以看到它的影子,类似...
    liudhkk阅读 12,950评论 3 38
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,038评论 3 119