标签使用命名颜色

时间:2019-11-01 13:27:49

标签: ios uilabel uicolor ios-darkmode

我只是在自定义UILabel子类中遇到了一个非常奇怪的问题,我需要一些帮助来弄清楚发生了什么。

问题似乎很长,但这主要是由于我添加的图像尽可能地说明了问题:-)

非常感谢您的帮助!


MyHTMLLabel类使用awakeFromNib()方法解析HTML的text属性,例如<hightlight>标签,以不同的颜色显示这些标签之间的文本。

多年来一直没有任何问题。现在,我已经更新了我的应用程序以支持iOS 13暗模式,从而为所有控件分配了名为Colors的颜色。

如果为MyHTMLLabel指定了命名颜色,则文本突出显示将不再起作用。完整标签仅以命名的颜色显示。如果像以前一样使用常规颜色(使用颜色选择器选择),那么一切都会像以前一样工作。


但是

问题仅出现在我的现有项目中。我试图在一个新项目中说明问题,但在那里一切正常……

完全相同的代码和类在我的现有项目和演示项目中显示了不同的行为。

因此,问题的根源似乎隐藏在我现有项目中的某个位置,但是我绝对不知道在哪里...


我尝试过的事情:

  • 为了更容易检查问题,我从MyHTMLLabel中删除了所有必需的代码。结果是MyLabel类,它只不过用AttributedString
  • 中的彩色awakeFromNib()替换了现有文本。
  • 我创建了一个空白TestViewController,其中仅包含两个MyLabel实例。一个实例使用常规颜色,而另一个实例使用命名颜色
  • 新鲜的演示项目中展示TestViewController 时,一切都很好:两个MyLabel都显示彩色文本
  • 在我的现有项目中展示TestViewController时,只有带有正常颜色MyLabel会显示彩色文本,而带有< em>命名颜色仅显示命名颜色

enter image description here enter image description here

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
    }

}

意见

  • 已在演示项目和我现有的项目中使用完全相同的代码进行了测试。该问题仅出现在我现有的项目中。因此,问题的根源似乎隐藏在我现有的代码中。
  • 现有项目创建于7年前,在Objectiv-C中运行,现在也使用Swift。与新项目相比,自然会有成千上万的差异。问题是我不知道如何寻找导致问题的唯一差异。
  • 仅当在awakeFromNib()中分配了带颜色的属性字符串时,问题才出现。如果添加了另一种稍后触发的方法(例如,单击按钮)并分配了彩色的属性字符串,则该方法会很好地显示。
  • 因此,基于使用正常颜色还是命名颜色,内部设置过程似乎存在某种差异。

关于如何进一步检查该问题的想法或建议吗?

我考虑过覆盖UILabel中的所有MyLabel方法,以查看在设置/初始化过程中调用了哪些方法,以及哪种方法使用错误的颜色。但是,似乎有大约一百种方法可以覆盖,并且过程非常繁琐?

有没有更好的主意如何进一步检查问题?

非常感谢!

0 个答案:

没有答案