iOS13下UITableView表头背景色无法修改,始终显示浅灰色求解决方案
iOS 13 下 UITableView 表头背景颜色不生效的解决方案
这是 iOS 13 推出后 UITableViewHeaderFooterView 的典型行为变更问题,我之前也踩过这个坑,帮你梳理下原因和解决方法:
问题根源
iOS 13 开始,苹果为 UITableViewHeaderFooterView 引入了 backgroundConfiguration 属性作为管理背景样式的新方式,系统默认会优先使用这个配置渲染背景,你之前直接修改 backgroundView.backgroundColor 的方式会被系统默认配置覆盖。至于调试时显示正常,是因为调试过程中 UI 刷新时机和运行时自动刷新逻辑存在差异,导致临时生效了。
解决方案
方案一:iOS 13+ 推荐写法
直接通过 backgroundConfiguration 设置背景色,这是苹果官方推荐的新方式,适配性更好:
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { //Section color & style UITableViewHeaderFooterView *v = (UITableViewHeaderFooterView *)view; v.textLabel.textColor = sectionColor; v.textLabel.font = sectionFont; v.textLabel.numberOfLines = 1; v.textLabel.minimumScaleFactor = 0.5; v.textLabel.adjustsFontSizeToFitWidth = YES; // iOS 13+ 背景设置方式 UIBackgroundConfiguration *config = UIBackgroundConfiguration.listHeaderFooterConfiguration; config.backgroundColor = [UIColor blueColor]; v.backgroundConfiguration = config; }
方案二:兼容 iOS 12 及以下版本
如果你的项目需要支持旧版本系统,可以加入版本判断分别处理:
- (void)tableView:(UITableView *)tableView willDisplayHeaderView:(UIView *)view forSection:(NSInteger)section { //Section color & style UITableViewHeaderFooterView *v = (UITableViewHeaderFooterView *)view; v.textLabel.textColor = sectionColor; v.textLabel.font = sectionFont; v.textLabel.numberOfLines = 1; v.textLabel.minimumScaleFactor = 0.5; v.textLabel.adjustsFontSizeToFitWidth = YES; if (@available(iOS 13.0, *)) { UIBackgroundConfiguration *config = UIBackgroundConfiguration.listHeaderFooterConfiguration; config.backgroundColor = [UIColor blueColor]; v.backgroundConfiguration = config; } else { // iOS 12 及以下的原有写法 v.backgroundView.alpha = 1; v.backgroundView.backgroundColor = [UIColor blueColor]; } }
额外提示
如果设置后仍有异常,可以检查下是否在 tableView:viewForHeaderInSection: 等其他方法中对表头视图做了额外背景设置,避免样式冲突。
内容的提问来源于stack exchange,提问作者ΩlostA
相关产品推荐
相关产品推荐

