iOS14 table 部分的白色背景 header

White background in table section header in iOS14

使用 xcode12.

构建 iOS14 后出现此问题

我有一个透明背景的 header 部分,在 iOS14 上它变成了白色,新的 _UISystemBackgroundView 添加到层次结构中。

iOS 14 带有新的两个电池配置:

  1. 内容配置。 UIContentConfiguration

顾名思义,内容配置可以帮助您操纵单元格的内容,例如图像、文本、辅助文本、布局指标和行为。

  1. 后台配置 UIBackgroundConfiguration

可以帮助处理背景颜色、视觉效果、描边、插图和圆角半径。即使我们不指定,所有单元格都将继承默认背景配置。

解决方案

要摆脱默认的 iOS14 白色背景,您需要更改 UITableViewCellUITableViewHeaderFooterView 背景配置,如下所示

    // Add this code in your AppDelegate didFinishLauncingWithOptions
    // or you can change configuration of certain subclass using self. backgroundConfiguration = ...
    if #available(iOS 14.0, *) {
        var bgConfig = UIBackgroundConfiguration.listPlainCell()
        bgConfig.backgroundColor = UIColor.clear
        UITableViewHeaderFooterView.appearance().backgroundConfiguration = bgConfig
        //For cell use: UITableViewCell.appearance().backgroundConfiguration = bgConfig
    }

阅读this article了解更多

Objective-C @Husam 解决方案的版本:

if (@available(iOS 14.0, *)) {
    UIBackgroundConfiguration *bgConfig = [UIBackgroundConfiguration listPlainCellConfiguration];
    bgConfig.backgroundColor = UIColor.clearColor;
    [UITableViewHeaderFooterView appearance].backgroundConfiguration = bgConfig;
}

在您的 UITableViewHeaderFooterView / UITableViewCell 自定义中 class - 使用实现示例覆盖下一个方法:

Swift:

@available(iOS 14.0, *)
override func updateConfiguration(using state: UICellConfigurationState) {
    backgroundConfiguration = UIBackgroundConfiguration.clear()
}

Objective-C:

- (void)updateConfigurationUsingState:(UICellConfigurationState *)state {
    self.backgroundConfiguration = [UIBackgroundConfiguration clearConfiguration];
}

使用 iOS 14 基于 API 的配置可能会禁用那些遗留 API 的功能(例如 cell.textLabelcell.detailTextLabel)。

要防止此系统行为,您可以将 backgroundView(旧版 API)设置为您的 header/footer/cell,然后为该视图设置自定义 backgroundColor