我只是在自定义UILabel
子类中遇到了一个非常奇怪的问题,我需要一些帮助来弄清楚发生了什么。
问题似乎很长,但这主要是由于我添加的图像尽可能地说明了问题:-)
非常感谢您的帮助!
MyHTMLLabel
类使用awakeFromNib()
方法解析HTML的text
属性,例如<hightlight>
标签,以不同的颜色显示这些标签之间的文本。
多年来一直没有任何问题。现在,我已经更新了我的应用程序以支持iOS 13暗模式,从而为所有控件分配了名为Colors的颜色。
如果为MyHTMLLabel
指定了命名颜色,则文本突出显示将不再起作用。完整标签仅以命名的颜色显示。如果像以前一样使用常规颜色(使用颜色选择器选择),那么一切都会像以前一样工作。
问题仅出现在我的现有项目中。我试图在一个新项目中说明问题,但在那里一切正常……
完全相同的代码和类在我的现有项目和演示项目中显示了不同的行为。
因此,问题的根源似乎隐藏在我现有项目中的某个位置,但是我绝对不知道在哪里...
MyHTMLLabel
中删除了所有必需的代码。结果是MyLabel
类,它只不过用AttributedString
awakeFromNib()
替换了现有文本。
TestViewController
,其中仅包含两个MyLabel
实例。一个实例使用常规颜色,而另一个实例使用命名颜色 TestViewController
时,一切都很好:两个MyLabel
都显示彩色文本TestViewController
时,只有带有正常颜色的MyLabel
会显示彩色文本,而带有< em>命名颜色仅显示命名颜色class MyLabel: UILabel {
override func awakeFromNib() {
super.awakeFromNib()
let customText = NSMutableAttributedString.init(string: "This is blue")
customText.addAttribute(.foregroundColor, value: UIColor.blue, range: NSRange.init(location: 8, length: 4))
attributedText = customText
}
}
awakeFromNib()
中分配了带颜色的属性字符串时,问题才出现。如果添加了另一种稍后触发的方法(例如,单击按钮)并分配了彩色的属性字符串,则该方法会很好地显示。 我考虑过覆盖UILabel
中的所有MyLabel
方法,以查看在设置/初始化过程中调用了哪些方法,以及哪种方法使用错误的颜色。但是,似乎有大约一百种方法可以覆盖,并且过程非常繁琐?
有没有更好的主意如何进一步检查问题?
非常感谢!