ios13 tableview Cell 无法识别暗模式更改?
ios13 Dark Mode change not recognized by tableview Cell?
我正在检查我现有的应用程序是否可以与 ios 13 新引入的暗模式功能一起正常工作。
一切似乎都正常,只有我的 table 视图之一的单元格背景没有根据模式(暗/亮)刷新。
如果应用以深色模式启动,单元格也会显示正确的深色背景。如果模式在应用程序处于后台时更改,则单元格背景颜色不会更改。单元格标签正确切换颜色。
对于 table 视图单元格,我使用以下函数进行渐变:
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
}
我将渐变背景添加到
中的 table 个单元格
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
使用以下代码
cell.layer.insertSublayer(gradient(frame: cell.bounds), at: 0)
知道吗,为什么在应用处于活动状态或处于后台时发生模式更改后,只有渐变功能似乎无法获得正确的颜色?
此致
Cell
会检测,layer
不会!例如,您必须手动更新 cell
中的所有 layer
改编。
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
removeAndReaddGradientIfNeeded()
}
}
如果这种渐变出现在这种类型的每个单元格上,那么它应该只是单元格的一部分,而不是被包含的视图控制器插入。然后,在您的单元格中,您可以实现:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.userInterfaceStyle != previousTraitCollection?.userInterfaceStyle {
// reload the gradient layer to react
}
}
您也可以在您的视图控制器中实现它并重新加载数据,但它更混乱。
我正在检查我现有的应用程序是否可以与 ios 13 新引入的暗模式功能一起正常工作。
一切似乎都正常,只有我的 table 视图之一的单元格背景没有根据模式(暗/亮)刷新。
如果应用以深色模式启动,单元格也会显示正确的深色背景。如果模式在应用程序处于后台时更改,则单元格背景颜色不会更改。单元格标签正确切换颜色。
对于 table 视图单元格,我使用以下函数进行渐变:
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
}
我将渐变背景添加到
中的 table 个单元格override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
使用以下代码
cell.layer.insertSublayer(gradient(frame: cell.bounds), at: 0)
知道吗,为什么在应用处于活动状态或处于后台时发生模式更改后,只有渐变功能似乎无法获得正确的颜色?
此致
Cell
会检测,layer
不会!例如,您必须手动更新 cell
中的所有 layer
改编。
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
removeAndReaddGradientIfNeeded()
}
}
如果这种渐变出现在这种类型的每个单元格上,那么它应该只是单元格的一部分,而不是被包含的视图控制器插入。然后,在您的单元格中,您可以实现:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.userInterfaceStyle != previousTraitCollection?.userInterfaceStyle {
// reload the gradient layer to react
}
}
您也可以在您的视图控制器中实现它并重新加载数据,但它更混乱。