14

UITableViewCells.xib文件中有我的自定义。由于 Xcode 11 Beta 5(也使用 Beta 6 进行了测试)我UILabels忽略了暗模式并且文本始终是黑色的。我已将UILabel文本颜色设置为默认(标签颜色),因此这应该会自动更改。有谁知道出了什么问题?

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

在此处输入图像描述

4

4 回答 4

13

这似乎是 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
        }
    }
}

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

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>

到:

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

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

于 2019-09-03T16:52:28.177 回答
3

这里有类似的问题。启用深色模式后,XIB 中使用的某些动态颜色不使用其深色版本。

这在模拟器和真实设备上都会发生。在 Xcode(Interface Builder)中模拟暗模式时,颜色确实会正确显示。

我的项目部署目标是 iOS 10。

于 2019-08-20T14:28:00.283 回答
1

今天发布的 Xcode 11 GM Seed 2 似乎解决了这个问题。

发行说明

修复了设置为在 iOS 13.0 之前部署的 XIB 文件中的系统颜色在运行时无法适应系统外观的问题。(54362252)

于 2019-09-17T01:16:09.730 回答
0

@Andrew Bennet 这对我有用。谢谢你。我不得不在 Objective-C 中实现这项工作,因为我的应用程序的这一部分仍在 Objective-C 中。

- (void)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
        lblTitle.textColor = UIColor.secondaryLabelColor;
    }
}
于 2019-10-29T02:30:24.153 回答