为什么 NSMutableAttributedString 在某些情况下会忽略背景色属性?
Why does NSMutableAttributedString ignore the background color attribute in certain cases?
我 运行 遇到了一个令人沮丧的问题。我想要一个标签来显示文本字符串,其中部分字符串具有不同的背景颜色。
此代码有效:
let s = NSMutableAttributedString(string: "test me bar", attributes: [:])
s.addAttribute(NSBackgroundColorAttributeName, value: UIColor.yellowColor(),
range: NSMakeRange(4, 2))
s.addAttribute(NSBackgroundColorAttributeName, value: UIColor.blueColor(),
range: NSMakeRange(8, 2))
self.detailDescriptionLabel.attributedText = s
但是,如果我恰好删除了对 addAttribute
的其中一个调用(哪个无关紧要),以便我指定字符串的一个范围以具有背景颜色属性,则没有背景颜色显示在字符串中的任何位置。
我在 iOS 8.1 上,这发生在模拟器和我的 iPhone 6 上。我在我的代码中发现了这个问题,并仅使用上面的代码片段在一个空的项目。
有什么想法吗?我在这里拔头发。这是该问题的精简版,但对于我的项目而言,能够拥有只有一个区域具有背景色的字符串很重要。
EDIT 如果我将其中一种背景颜色设置为 UIColor.clearColor()
,那么一切都会按预期工作。我可能在看 UIKit 中的错误吗?
您首先需要NSBackgroundColorAttributeName
在整个文本中应用透明颜色。
[s addAttribute:NSBackgroundColorAttributeName value:[UIColor clearColor] range:(NSRange){0, s.length}];
然后你可以应用第二种颜色,你想要突出显示的文本范围。
[s addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:(NSRange){0, 2}];
对于Swift:
mutableAttributedString.addAttribute(NSAttributedString.Key.backgroundColor, value: UIColor.clear , range: {0, 2})
mutableAttributedString.addAttribute(NSAttributedString.Key.backgroundColor, value: UIColor.yellow , range: {0, 2})
这也是您的错误:
只需这样做:
self.detailDescriptionLabel.numberOfLines = 2; // <---
你的问题就解决了。
我 运行 遇到了一个令人沮丧的问题。我想要一个标签来显示文本字符串,其中部分字符串具有不同的背景颜色。
此代码有效:
let s = NSMutableAttributedString(string: "test me bar", attributes: [:])
s.addAttribute(NSBackgroundColorAttributeName, value: UIColor.yellowColor(),
range: NSMakeRange(4, 2))
s.addAttribute(NSBackgroundColorAttributeName, value: UIColor.blueColor(),
range: NSMakeRange(8, 2))
self.detailDescriptionLabel.attributedText = s
但是,如果我恰好删除了对 addAttribute
的其中一个调用(哪个无关紧要),以便我指定字符串的一个范围以具有背景颜色属性,则没有背景颜色显示在字符串中的任何位置。
我在 iOS 8.1 上,这发生在模拟器和我的 iPhone 6 上。我在我的代码中发现了这个问题,并仅使用上面的代码片段在一个空的项目。
有什么想法吗?我在这里拔头发。这是该问题的精简版,但对于我的项目而言,能够拥有只有一个区域具有背景色的字符串很重要。
EDIT 如果我将其中一种背景颜色设置为 UIColor.clearColor()
,那么一切都会按预期工作。我可能在看 UIKit 中的错误吗?
您首先需要NSBackgroundColorAttributeName
在整个文本中应用透明颜色。
[s addAttribute:NSBackgroundColorAttributeName value:[UIColor clearColor] range:(NSRange){0, s.length}];
然后你可以应用第二种颜色,你想要突出显示的文本范围。
[s addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:(NSRange){0, 2}];
对于Swift:
mutableAttributedString.addAttribute(NSAttributedString.Key.backgroundColor, value: UIColor.clear , range: {0, 2})
mutableAttributedString.addAttribute(NSAttributedString.Key.backgroundColor, value: UIColor.yellow , range: {0, 2})
这也是您的错误:
只需这样做:
self.detailDescriptionLabel.numberOfLines = 2; // <---
你的问题就解决了。