iOS 13暗模式:用于NSAttributedString

时间:2019-09-17 12:17:10

标签: ios swift nsattributedstring ios-darkmode

在iOS 13暗模式下,我在两种情况下使用UIColor.link

  • NSAttributedString
  • 图标的淡色

问题:尽管我在两种情况下都使用UIColor.link,但它们呈现为不同的颜色。 为NSAttributedString渲染的颜色较深,我发现很难在黑色背景上读取该颜色。

NSAttributedString的代码

if #available(iOS 13.0, *) {
    linkAttributes[.foregroundColor] = UIColor.link
} else {
    linkAttributes[.foregroundColor] = UIColor.blue
}
// .font is the only other attribute I set
let attStr = NSAttributedString(string: cardName, attributes: linkAttributes)

我在以编程方式实例化的UIButton子类中使用此属性字符串:

class ConditionButton: UIButton {
    required init() {
        super.init(frame: .zero)
        configureOnce()
    }

    func configureOnce() {
        self.titleLabel?.numberOfLines = 0
        self.titleLabel?.lineBreakMode = .byWordWrapping
        self.titleLabel?.font = labelFont
        self.contentHorizontalAlignment = .left
    }

    // some more code that does self.setAttributedTitle(attributedString, for: .normal)
}

顶部的文本是UIButton带有NSAttributedString的子类的难以阅读的标签,底部的图像和{ {1}}

enter image description here

为什么会这样?如何为UIButton获得相同的可读颜色?

1 个答案:

答案 0 :(得分:1)

这是...的组合

我的错误:

当我问这个问题时,我没有注意到我的代码中包含以下行:

linkAttributes[.link] = url

由于我现在使用了按钮,因此不再需要此属性。

插入NSAttributedString

使用时

linkAttributes[.link] = url

NSAttributedString中,Apple会用深蓝色覆盖该颜色,直到iOS 12为止,这种颜色都可以。

看来,苹果公司已经忘记使用UIColor.link来访问NSAttributedString中的链接。

因此,在暗模式下使用.link属性的每个人都会产生这种难以理解的深蓝色。

写完这个答案后,我会提起雷达的。