为什么 .foregroundColor 属性不适用于 NSMutableAttributedString?

问题描述

我试图通过将字符串的第一部分设置为某种颜色,然后将第二部分设置为粗体来创建 NSMutableAttributedString。这是我迄今为止尝试过的:

let attributedText = NSMutableAttributedString(string: String.init(format: "#%@ : ","Field Name"),attributes: [.foregroundColor: UIColor.gray])
attributedText.append(NSMutableAttributedString(string: String.init(format: "%@","Sample Field"),attributes: [.font: UIFont.boldSystemFont(ofSize: 16)]))
myLabel.attributedText = attributedText

这里发生的是第二部分成功加粗,但我在第一部分应用的颜色没有得到反映。有什么我在这里遗漏的吗?

我的环境在 Xcode 12.2 中运行 Swift 5。

解决方法

如果您想要相同的属性,只需使用 var 来保持对它们的引用,请更改字体属性并在附加新字符串时使用它

let label = UILabel(frame: .init(origin: .zero,size: .init(width: 250,height: 50)))
var attr:  [NSAttributedString.Key: Any] = [.foregroundColor: UIColor.gray]

let attributedText = NSMutableAttributedString(string: .init(format: "#%@ : ","Field Name"),attributes: attr)
attr[.font] = UIFont.boldSystemFont(ofSize: 16)
attributedText.append(.init(string: .init(format: "%@","Sample Field"),attributes: attr))

label.attributedText = attributedText
label

enter image description here