这似乎是 Xcode 11 中的错误(在 beta 7 和 GM Seed 1 中测试) - 我已通过反馈助手 (FB7198213) 向 Apple 提交了此问题。问题是 Xcode 11 GM Seed 2 中的fixed。
对于以前版本的 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 editor 中似乎存在一个关于编辑标签颜色的错误。当在 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"/> 行已被删除。手动添加此选项可修复标签在暗模式下的行为。