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

时间:2019-10-09 20:51:13

标签: ios swift uicolor ios-darkmode

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

一切似乎都可以正常工作,只有我的一个tableViews中的单元格背景没有根据模式(暗/亮)刷新。

如果应用在黑暗模式下启动,则单元格还会显示正确的黑暗背景。如果在应用程序处于后台状态下更改模式,则单元格背景颜色不会更改。单元格标签可以正确切换颜色。

对于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)

任何想法,为什么在应用程序处于活动状态或在后台运行模式更改后,仅渐变功能似乎无法获得正确的颜色?

致谢

2 个答案:

答案 0 :(得分:5)

Cell将检测到,layer不会检测到!例如,您必须手动更新layer中的所有cell适应。

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

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

More description here

答案 1 :(得分:0)

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


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

  if traitCollection.userInterfaceStyle != previousTraitCollection?.userInterfaceStyle {
    // reload the gradient layer to react
  }
}

您还可以在视图控制器中实现此功能,然后重新加载数据,但这会更麻烦。