.xib 文件中 UITableViewCell 中的 UILabel 忽略暗模式
UILabel in UITableViewCell in .xib file ignores Dark Mode
我在 .xib
文件中有我的自定义 UITableViewCells
。由于 Xcode 11 Beta 5(也使用 Beta 6 进行了测试),我的 UILabels
忽略了深色模式并且文本始终为黑色。我已将 UILabel
文本颜色设置为默认(标签颜色),因此它会自动更改。有人知道哪里出了问题吗?
这是一个屏幕截图:第一个单元格是基本单元格,第二个单元格是 .xib
文件中的自定义单元格。
这里有类似的问题。当启用深色模式时,XIB 中使用的一些动态颜色不会使用它们的深色版本。
这在模拟器和真实设备上都会发生。在 Xcode (Interface Builder) 中模拟黑暗模式时,颜色 do 正确显示。
我的项目部署目标是iOS10。
这似乎是 Xcode 11(在 beta 7 和 GM Seed 1 中测试过)中的错误 - 我已通过反馈助手 (FB7198213) 向 Apple 提交了此问题。问题是 fixed Xcode 11 GM Seed 2.
对于 Xcode 11 的早期版本,动态标签颜色的不正确行为的解决方法是在 table 视图单元格子类的 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
}
}
}
原回答:
此原始答案仅解决默认(即主要)标签颜色的问题
Xcode11(在 beta 7 中测试)的 XIB editor 中似乎存在一个关于编辑标签颜色的错误。当在 XIB 编辑器中将标签颜色设置为 "Label Color"(即使它已经设置为该颜色)时,底层 XML 的修改方式会导致标签即使在暗模式下也显示为黑色.检查 XIB 文件在创建新标签之间的差异,并在将该标签的颜色明确设置为 "Label Color" 之后,可以看到差异。
对于我的简单示例,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"/>
行已被删除。手动添加此选项可修复深色模式下标签的行为。
Xcode今天发布的11 GM Seed 2似乎解决了这个问题。
来自release note:
Fixed an issue where system colors in XIB files set to deploy before
iOS 13.0 wouldn’t adapt to the system appearance at runtime.
(54362252)
@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;
}
}
我在 .xib
文件中有我的自定义 UITableViewCells
。由于 Xcode 11 Beta 5(也使用 Beta 6 进行了测试),我的 UILabels
忽略了深色模式并且文本始终为黑色。我已将 UILabel
文本颜色设置为默认(标签颜色),因此它会自动更改。有人知道哪里出了问题吗?
这是一个屏幕截图:第一个单元格是基本单元格,第二个单元格是 .xib
文件中的自定义单元格。
这里有类似的问题。当启用深色模式时,XIB 中使用的一些动态颜色不会使用它们的深色版本。
这在模拟器和真实设备上都会发生。在 Xcode (Interface Builder) 中模拟黑暗模式时,颜色 do 正确显示。
我的项目部署目标是iOS10。
这似乎是 Xcode 11(在 beta 7 和 GM Seed 1 中测试过)中的错误 - 我已通过反馈助手 (FB7198213) 向 Apple 提交了此问题。问题是 fixed Xcode 11 GM Seed 2.
对于 Xcode 11 的早期版本,动态标签颜色的不正确行为的解决方法是在 table 视图单元格子类的 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
}
}
}
原回答: 此原始答案仅解决默认(即主要)标签颜色的问题
Xcode11(在 beta 7 中测试)的 XIB editor 中似乎存在一个关于编辑标签颜色的错误。当在 XIB 编辑器中将标签颜色设置为 "Label Color"(即使它已经设置为该颜色)时,底层 XML 的修改方式会导致标签即使在暗模式下也显示为黑色.检查 XIB 文件在创建新标签之间的差异,并在将该标签的颜色明确设置为 "Label Color" 之后,可以看到差异。
对于我的简单示例,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"/>
行已被删除。手动添加此选项可修复深色模式下标签的行为。
Xcode今天发布的11 GM Seed 2似乎解决了这个问题。
来自release note:
Fixed an issue where system colors in XIB files set to deploy before iOS 13.0 wouldn’t adapt to the system appearance at runtime. (54362252)
@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;
}
}