默认 tableview 单元格不响应暗模式
Default tableview cells don't respond to dark mode
使用自定义单元格,我可以进入黑暗 mode/normal 模式以正常工作。但是,当使用 Apple 提供的默认框架单元格时,无论我启用哪种模式,它都保持白色。我在这里阅读
关于同样的问题。答案告诉我使用这个:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
removeAndReaddGradientIfNeeded()
}
}
但我不确定我应该如何使用它以及它与我的细胞有何关系。我现在的单元格代码是这样的:
if #available(iOS 13, *) {
cell.backgroundColor = UIColor.systemBackground
cell.textLabel?.textColor = UIColor(named: "MainLabelColor")
cell.detailTextLabel?.textColor = UIColor(named: "SubLabelColor")
}
我在两种模式的资源中使用系统颜色和自定义颜色,一种用于浅色,一种用于深色。现在,这在自定义单元格中工作正常,但在默认情况下不行。
谁能告诉我如何对单元格使用委托函数?
您是否尝试过更改 contentView 的背景颜色?因为内容视图位于单元格的顶部。
if #available(iOS 13, *) {
cell.contentView.backgroundColor = UIColor.systemBackground
//For named color you have to resolve it.
cell.textLabel?.textColor = UIColor(named: "MainLabelColor")?.resolvedColor(with: self.traitCollection)
cell.detailTextLabel?.textColor = UIColor(named: "SubLabelColor")?.resolvedColor(with: self.traitCollection)
//MARK:- Even If your Viewcontroller disabled dark mode, tableView cell will be enabled.
self.overrideUserInterfaceStyle = .unspecified
}
要支持深色模式,请确保您删除了以下覆盖:-
UserInterfaceStyle 默认值未指定。因此,您可能已启用 userInterfaceStyle 以在代码或列表文件中的某处点亮。
在 Plist 文件中检查以下键值并将其删除:-
<key>UIUserInterfaceStyle</key>
<string>light</string>
在代码中检查以下行并将其删除。
i) 如果键 window 被覆盖为轻模式,您的整个应用程序将被强制进入轻模式。
UIApplication.shared.keyWindow?.overrideUserInterfaceStyle = .light
ii) 如果 View Controller 被覆盖为灯光模式,您的整个 ViewController 将被强制进入灯光模式。
self.overrideUserInterfaceStyle = .light
使用自定义单元格,我可以进入黑暗 mode/normal 模式以正常工作。但是,当使用 Apple 提供的默认框架单元格时,无论我启用哪种模式,它都保持白色。我在这里阅读
关于同样的问题。答案告诉我使用这个:
override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
super.traitCollectionDidChange(previousTraitCollection)
if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
removeAndReaddGradientIfNeeded()
}
}
但我不确定我应该如何使用它以及它与我的细胞有何关系。我现在的单元格代码是这样的:
if #available(iOS 13, *) {
cell.backgroundColor = UIColor.systemBackground
cell.textLabel?.textColor = UIColor(named: "MainLabelColor")
cell.detailTextLabel?.textColor = UIColor(named: "SubLabelColor")
}
我在两种模式的资源中使用系统颜色和自定义颜色,一种用于浅色,一种用于深色。现在,这在自定义单元格中工作正常,但在默认情况下不行。
谁能告诉我如何对单元格使用委托函数?
您是否尝试过更改 contentView 的背景颜色?因为内容视图位于单元格的顶部。
if #available(iOS 13, *) {
cell.contentView.backgroundColor = UIColor.systemBackground
//For named color you have to resolve it.
cell.textLabel?.textColor = UIColor(named: "MainLabelColor")?.resolvedColor(with: self.traitCollection)
cell.detailTextLabel?.textColor = UIColor(named: "SubLabelColor")?.resolvedColor(with: self.traitCollection)
//MARK:- Even If your Viewcontroller disabled dark mode, tableView cell will be enabled.
self.overrideUserInterfaceStyle = .unspecified
}
要支持深色模式,请确保您删除了以下覆盖:-
UserInterfaceStyle 默认值未指定。因此,您可能已启用 userInterfaceStyle 以在代码或列表文件中的某处点亮。
在 Plist 文件中检查以下键值并将其删除:-
<key>UIUserInterfaceStyle</key>
<string>light</string>
在代码中检查以下行并将其删除。
i) 如果键 window 被覆盖为轻模式,您的整个应用程序将被强制进入轻模式。
UIApplication.shared.keyWindow?.overrideUserInterfaceStyle = .light
ii) 如果 View Controller 被覆盖为灯光模式,您的整个 ViewController 将被强制进入灯光模式。
self.overrideUserInterfaceStyle = .light