.xib文件中的UITableViewCell中的UILabel忽略暗模式

pat*_*ckS 13 xcode ios ios13 ios-darkmode

UITableViewCells.xib文件中有自己的习惯。由于Xcode 11 Beta 5(也已通过Beta 6测试),因此我UILabels忽略了“暗模式”,并且文本始终为黑色。我已将UILabel文本颜色设置为默认(标签颜色),因此它应该自动更改。有人有什么想法吗?

这是屏幕截图:第一个单元格是基本单元格,第二个单元格是.xib文件中的自定义单元格。

在此处输入图片说明

And*_*net 9

这似乎是Xcode 11中的错误(已在beta 7和GM Seed 1中进行了测试)-我已通过反馈助手(FB7198213)向Apple提出了此问题。此问题已在Xcode 11 GM Seed 2中修复

对于Xcode 11的早期版本,动态标签颜色的不正确行为的解决方法是awakeFromNib()在表视图单元格子类中重新分配标签颜色。例如:

class TableCell: UITableViewCell {

    @IBOutlet private weak var label: UILabel!

    override func awakeFromNib() {
        super.awakeFromNib()
        if #available(iOS 13.0, *) {
            // The label's textColor was set to secondaryLabel in the XIB editor
            // but we reassign it to secondaryLabel again here. This prevents
            // a bug where the label always appears in its light mode variant.
            label.textColor = .secondaryLabel
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

原始答案: 此原始答案仅针对默认(即主)标签颜色解决了该问题

Xcode 11(在beta 7中进行了测试)的XIB 编辑器中似乎存在一个与编辑标签颜色有关的错误。当在XIB编辑器中将标签颜色设置为“标签颜色”时(即使已经将其设置为标签颜色),底层XML也会以某种方式被修改,即使在黑暗模式下,标签也会显示黑色。在创建新标签与将标签的颜色显式设置为“标签颜色”之间检查XIB文件的差异之后,您可以看到其中的区别。

对于我的简单示例,XIB文件的XML来自:

<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text here" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VKH-gX-gtO">
   <rect key="frame" x="20" y="15" width="71" height="21"/>
   <fontDescription key="fontDescription" type="system" pointSize="17"/>
   <nil key="textColor"/>
   <nil key="highlightedColor"/>
</label>
Run Code Online (Sandbox Code Playgroud)

至:

<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Text here" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VKH-gX-gtO">
   <rect key="frame" x="20" y="15" width="71" height="21"/>
   <fontDescription key="fontDescription" type="system" pointSize="17"/>
   <nil key="highlightedColor"/>
</label>
Run Code Online (Sandbox Code Playgroud)

请注意,该行<nil key="textColor"/>已删除。手动添加此背面可修复标签在暗模式下的行为。