Swift中如何移除分组UITableView上方的空白区域?
嘿,这个问题我太熟了!做Swift开发时,分组样式的UITableView顶部那片莫名的空白真的很头疼,我试过好几种方法,给你整理几个最实用的:
方法1:重置内容内边距
分组UITableView默认会给顶部加一段内边距,直接把contentInset和scrollIndicatorInsets设为零就能去掉:
override func viewDidLoad() { super.viewDidLoad() // 移除顶部空白内边距 tableView.contentInset = UIEdgeInsets.zero // 同步滚动指示器的位置,避免错位 tableView.scrollIndicatorInsets = UIEdgeInsets.zero }
方法2:设置空的tableHeaderView
有时候光改内边距没用,是因为系统默认给分组tableView加了一个隐藏的headerView。给它替换成一个高度极小的空白视图就能解决:
override func viewDidLoad() { super.viewDidLoad() // 用最小非零高度,避免系统强制还原默认高度 let emptyHeader = UIView(frame: CGRect(x: 0, y: 0, width: tableView.bounds.width, height: CGFloat.leastNormalMagnitude)) tableView.tableHeaderView = emptyHeader }
这里别直接设高度为0,系统可能会无视这个设置,用CGFloat.leastNormalMagnitude是个小技巧,既能让视图几乎不可见,又能被系统正确识别。
方法3:适配iOS 15+的新属性
iOS 15之后,苹果给UITableView加了个sectionHeaderTopPadding属性,默认会给每个section顶部加额外空白。如果你的APP要适配iOS15及以上,一定要加上这个设置:
override func viewDidLoad() { super.viewDidLoad() if #available(iOS 15.0, *) { tableView.sectionHeaderTopPadding = 0 } }
额外提醒:区分table顶部和section顶部的空白
如果是每个section顶部都有空白,那除了上面的设置,还要调整section的头部高度:
// 直接设为0 tableView.sectionHeaderHeight = 0 // 如果用自动布局的sectionHeader,记得同时设置估算高度 tableView.estimatedSectionHeaderHeight = 0
一般来说,把方法1、2和iOS15的适配结合起来,就能彻底解决分组UITableView顶部的空白问题啦!
内容的提问来源于stack exchange,提问作者Nagra
相关产品推荐
相关产品推荐

