默认的 tableview 单元格不响应暗模式

Posted

技术标签:

【中文标题】默认的 tableview 单元格不响应暗模式【英文标题】:Default tableview cells don't respond to dark mode 【发布时间】:2019-11-27 13:06:05 【问题描述】:

使用自定义单元格,我可以让暗模式/正常模式正常工作。但是,当使用 Apple 提供的默认框架单元时,无论我启用什么模式,它都保持白色。我在这里读到了

ios13 Dark Mode change not recognized by tableview Cell?

关于同样的问题。答案告诉我使用这个:

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")

我在具有两种模式的资产中使用系统颜色和自定义颜色,一种用于浅色,一种用于深色。现在,这在自定义单元格中可以正常工作,但默认情况下不行。

谁能告诉我如何在单元格中使用委托函数?

【问题讨论】:

您是否将该代码复制粘贴到您的代码中并构建并运行它? 您需要将此代码复制并粘贴到您的 TabeViewCell 类中。就是这样。 我做了,但removeAndReaddGradientIfNeeded() 收到错误“使用未解析的标识符”。没有找到替代品,如果我将其删除,暗模式单元格没有任何反应。 【参考方案1】:

您是否尝试更改 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) 如果按键窗口被覆盖为光照模式,您的整个应用将被强制为光照模式。

  UIApplication.shared.keyWindow?.overrideUserInterfaceStyle = .light

ii) 如果 View Controller 被覆盖为光照模式,您的整个 ViewController 将被强制为光照模式。

 self.overrideUserInterfaceStyle = .light

【讨论】:

谢谢,但什么也没发生。在黑暗模式下仍然是白色的。也试过cell.layer.backgroundColor,但也没有。 能否分享一下您的 TableviewCell 类和视图控制器代码。 self.overrideUserInterfaceStyle = .unspecified ,将此行添加到您的 Tableview 单元格类中。 很好,self.overrideUserInterfaceStyle = .unspecified 的行对我有用!非常感谢@Manikandan 的提示。所以,我猜暗模式被一些我不知道的代码覆盖了,不是吗? 请检查更新后的答案,找出导致此问题的易受攻击的代码。

以上是关于默认的 tableview 单元格不响应暗模式的主要内容,如果未能解决你的问题,请参考以下文章

TableView 单元格不显示信息

动画下拉UIView时TableView单元格不改变高度

TableView 多个单元格不起作用,由于信号 9 而终止

tableView didSelect 单元格不起作用

tableView 编辑模式删除按钮(减号)没有响应点击 - 我该如何解决这个问题?

ios第一个单元格不是从UITableView的顶部开始