iOS 15中table view每个section上方额外padding如何消除?
问题原因
iOS 15 为 UITableView 新增了默认值为 UITableViewAutomaticDimension 的 sectionHeaderTopPadding 属性,会自动给每个 section 头部顶部增加一段额外的空白间距,也就是你遇到的旧版本不存在的粗白边,属于系统版本迭代带来的默认布局变更,大量iOS开发者在适配iOS15时都遇到过相同问题。

解决方案
可根据你的业务需求选择以下任意一种方案:
- 全局统一关闭:如果全App所有列表都不需要该默认间距,可在App启动生命周期中全局配置,全局生效无需逐个页面修改:
if #available(iOS 15.0, *) { UITableView.appearance().sectionHeaderTopPadding = 0 }
- 单个列表单独调整:如果仅当前页面出现问题,不需要影响其他页面的列表布局,仅给当前出现问题的tableView实例设置属性即可:
if #available(iOS 15.0, *) { yourTableView.sectionHeaderTopPadding = 0 }
- 特殊适配:如果你使用的是
UITableViewStyleGrouped类型的分组列表,同时需要隐藏特定section的头部,除了设置上述属性外,还需要同时实现两个代理方法避免系统默认高度生效:
// 返回空视图覆盖系统默认头部 func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { return UIView() } // 返回最小有效高度,不要直接返回0 func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return CGFloat.leastNormalMagnitude }
设置完成后调用yourTableView.reloadData()刷新列表即可验证效果。
内容的提问来源于stack exchange,提问作者michaelthedeveloper
相关产品推荐
相关产品推荐

