tableview单元格无法识别ios13暗模式更改?

tableview单元格无法识别ios13暗模式更改?,ios,swift,uicolor,ios-darkmode,Ios,Swift,Uicolor,Ios Darkmode,我正在检查我现有的应用程序是否能与ios 13新引入的暗模式功能正常工作 一切似乎都很好,只是我的一个TableView中的单元格背景没有按照模式(暗/亮)刷新 如果应用程序以暗模式启动,单元格也会显示正确的暗背景。如果模式在应用程序处于背景时更改,则单元格背景颜色不会更改。单元格标签将正确切换颜色 对于tableview单元格,我使用以下func作为渐变: func gradient(frame:CGRect) -> CAGradientLayer { let gradCol

我正在检查我现有的应用程序是否能与ios 13新引入的暗模式功能正常工作

一切似乎都很好,只是我的一个TableView中的单元格背景没有按照模式(暗/亮)刷新

如果应用程序以暗模式启动,单元格也会显示正确的暗背景。如果模式在应用程序处于背景时更改,则单元格背景颜色不会更改。单元格标签将正确切换颜色

对于tableview单元格,我使用以下func作为渐变:

func gradient(frame:CGRect) -> CAGradientLayer { 

    let gradColor1 = UIColor(named: "gradientBright")!
    let gradColor2 = UIColor(named: "gradientDark")!

    let layer = CAGradientLayer()
    layer.frame = frame
    layer.startPoint = CGPoint(x: 0.5, y: 0)
    layer.endPoint = CGPoint(x: 0.5, y: 1)
    layer.colors = [
        gradColor1.cgColor,
        gradColor2.cgColor
    ]
    layer.shadowOpacity = 0.7
    layer.shadowRadius = 10.0
    return layer
}
我将渐变背景添加到中的表格单元格中

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
使用以下代码

cell.layer.insertSublayer(gradient(frame: cell.bounds), at: 0)
你知道吗,为什么只有渐变功能在应用程序激活或处于后台时发生模式更改后,似乎无法获得正确的颜色


关于

单元
将检测到,
将不会检测到!例如,您必须手动更新
单元格中的所有
自适应

override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
    super.traitCollectionDidChange(previousTraitCollection)

    if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
        removeAndReaddGradientIfNeeded()
    }
}

如果此渐变位于此类型的每个单元格上,则它应该只是单元格的一部分,而不是由包含的视图控制器插入。然后,在您的单元中,您可以实现:


重写func traitCollectionDidChange(\uPreviousTraitCollection:UITraitCollection?){
super.traitCollectionDidChange(以前的traitCollection)
如果traitCollection.userInterfaceStyle!=以前的traitCollection?.userInterfaceStyle{
//重新加载渐变层以进行反应
}
}

您也可以在视图控制器中实现这一点并重新加载数据,但这会更混乱。

在该函数中添加层会导致重复的层。只有在以前没有添加的情况下才添加图层。我以前有过这个问题,我发布了一个带有我问题链接的答案。如果您还有任何问题,请查看并告诉我。您最终能告诉我如何在uitableviewcell中添加渐变层,并确保只添加一次吗?我不知道这个问题,因为所有教程和文档都告诉我要将它添加到uitableview类中。这必须在uitableviewcell中完成(初始添加和替换)?无法添加具有正确大小的gradientlayer(self.bounds、self.contentView.bound和self.backgroundView.bounds似乎小于显示宽度)是的
layoutSubviews
是您需要覆盖的函数,以便在大小更改时重新计算大小。