应用其他属性时,NSAttributedString 背景颜色不纯
NSAttributedString background color is not solid when other attributes are applied
我想使用 NSAttributedString
:
对 UILabel
文本样式进行几处更改
- 部分字符串必须实心
backgroundColor
;
- 字符串的某些部分必须有不同的
font
;
- 字符串的某些部分必须有不同的
foregroundColor
;
但是当我进行这些更改时,我 运行 发现 backgroundColor
在(我认为)其他属性(font
之间有一些间距(图像中的垂直线) /foregroundColor
).
(参见full size image)
我该如何解决?
Swift游乐场代码:
import PlaygroundSupport
import UIKit
let label = UILabel()
label.backgroundColor = .black
let text = "Hello + World!"
let nsText = NSString(string: text)
let attributedString = NSMutableAttributedString(string: text)
attributedString.addAttribute(.backgroundColor, value: UIColor.systemCyan, range: nsText.range(of: "Hello + Wo"))
attributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 100.0), range: nsText.range(of: "Hello"))
attributedString.addAttribute(.foregroundColor, value: UIColor.systemPurple, range: nsText.range(of: " + "))
attributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 80.0), range: nsText.range(of: " + "))
attributedString.addAttribute(.foregroundColor, value: UIColor.white, range: nsText.range(of: "World!"))
attributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 44.0), range: nsText.range(of: "World!"))
label.attributedText = attributedString
label.sizeToFit()
PlaygroundPage.current.liveView = label
有一个名为 expansion
的属性可以使用浮点值调整字体的扩展系数。该问题仅发生在具有不同字体大小的两个范围相遇时,这是一个无法覆盖的图形渲染问题。但是,如果您明确地将扩展因子归零,或者甚至应用一个小的负值,差距将不会很明显。
attributedString.addAttribute(.expansion, value: NSNumber(value: 0), range: nsText.range(of: "Hello + World!"))
我想使用 NSAttributedString
:
UILabel
文本样式进行几处更改
- 部分字符串必须实心
backgroundColor
; - 字符串的某些部分必须有不同的
font
; - 字符串的某些部分必须有不同的
foregroundColor
;
但是当我进行这些更改时,我 运行 发现 backgroundColor
在(我认为)其他属性(font
之间有一些间距(图像中的垂直线) /foregroundColor
).
(参见full size image)
我该如何解决?
Swift游乐场代码:
import PlaygroundSupport
import UIKit
let label = UILabel()
label.backgroundColor = .black
let text = "Hello + World!"
let nsText = NSString(string: text)
let attributedString = NSMutableAttributedString(string: text)
attributedString.addAttribute(.backgroundColor, value: UIColor.systemCyan, range: nsText.range(of: "Hello + Wo"))
attributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 100.0), range: nsText.range(of: "Hello"))
attributedString.addAttribute(.foregroundColor, value: UIColor.systemPurple, range: nsText.range(of: " + "))
attributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 80.0), range: nsText.range(of: " + "))
attributedString.addAttribute(.foregroundColor, value: UIColor.white, range: nsText.range(of: "World!"))
attributedString.addAttribute(.font, value: UIFont.systemFont(ofSize: 44.0), range: nsText.range(of: "World!"))
label.attributedText = attributedString
label.sizeToFit()
PlaygroundPage.current.liveView = label
有一个名为 expansion
的属性可以使用浮点值调整字体的扩展系数。该问题仅发生在具有不同字体大小的两个范围相遇时,这是一个无法覆盖的图形渲染问题。但是,如果您明确地将扩展因子归零,或者甚至应用一个小的负值,差距将不会很明显。
attributedString.addAttribute(.expansion, value: NSNumber(value: 0), range: nsText.range(of: "Hello + World!"))