iOS15 UITableView吸顶section header透明背景失效如何解决?
问题根源
iOS 15 对 plain 样式 UITableView 的 section 悬停逻辑做了调整:当 section header 进入吸顶状态时,系统会自动更新视图的状态配置,覆盖你预先设置的默认透明背景,加载系统预设的悬停状态灰色背景,导致透明效果失效。
修复方案
方案1:重写视图配置更新方法(推荐,系统规范适配)
在自定义的 UITableViewHeaderFooterView 中重写 updateConfiguration(using:) 方法,每次状态更新时强制重置背景为透明,适配所有状态场景:
if #available(iOS 14.0, *) { override func updateConfiguration(using state: UIViewConfigurationState) { super.updateConfiguration(using: state) var backgroundConfig = UIBackgroundConfiguration.listPlainHeaderFooter() backgroundConfig.backgroundColor = .clear self.backgroundConfiguration = backgroundConfig } }
方案2:配置背景转换器
如果不想重写视图方法,也可以直接给 header 配置全局背景转换器,无论什么状态都返回透明背景配置:
if #available(iOS 14.0, *) { var backgroundConfiguration = UIBackgroundConfiguration.listPlainHeaderFooter() backgroundConfiguration.backgroundColor = .clear self.backgroundConfiguration = backgroundConfiguration // 新增以下代码适配iOS15+悬停状态 if #available(iOS 15.0, *) { self.backgroundConfigurationTransformer = { _ in var config = UIBackgroundConfiguration.listPlainHeaderFooter() config.backgroundColor = .clear return config } } }
方案3:兼容更低版本的简单方案
如果你的项目需要兼容iOS14以下版本,也可以直接废弃 UIBackgroundConfiguration 方案,设置空背景视图即可,所有系统版本都生效:
backgroundView = UIView()
内容的提问来源于stack exchange,提问作者Brian M
相关产品推荐
相关产品推荐

