如何在不丢失`foregroundColor` NSAttributedStringKey的情况下设置`strokeColor`?

时间:2018-01-21 12:37:43

标签: swift swift4 nsattributedstring

有人说"在strokeWidth"上设置负值,但它会使字体变薄。你有什么想法吗?

        let attributes: [NSAttributedStringKey : Any] = [
            .foregroundColor : UIColor.white,
            .strokeColor : UIColor.black,
            .strokeWidth : 2.0,
        ]

        label.attributedText = NSAttributedString(string: "Sample", attributes:attributes)

1 个答案:

答案 0 :(得分:2)

“有人说'在strokeWidth上设置减去值'” - 有人是Apple itself

  

这是因为NSStrokeWidthAttributeName的值的符号被解释为模式;它指示是否要填充,描边或同时填充属性字符串。具体而言,零值仅显示填充,而正值仅显示笔划。负值允许显示填充和描边。

你确实设置了一个负数strokeWidth但是在小尺寸时难以察觉有效(iOS 11默认字体大小是14pt)。结合像素平滑,这使得字体的外观看起来更薄。这是64pt时负strokeWidth的结果:

let attributes: [NSAttributedStringKey : Any] = [
    .foregroundColor : UIColor.white,
    .strokeColor : UIColor.black,
    .strokeWidth : -2,
    .font: UIFont.systemFont(ofSize: 64)
]
let text = NSAttributedString(string: "Sample", attributes:attributes)

strokeWidth = -2

strokeWidth: -5时的结果:

strokeWidth = -5

当你将strokeWidth设置得更深,但看起来更“厚”,但在美学上并不令人愉悦。我会留给你决定应用程序的外观。