为什么NSMutableAttributedString在某些情况下会忽略背景颜色属性?

时间:2015-02-07 03:51:26

标签: ios background-color nsattributedstring nsmutableattributedstring

我遇到了令人沮丧的问题。我想要一个标签来显示一个文本字符串,其中部分字符串具有不同的背景颜色。

此代码有效:

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

enter image description here

但是,如果我删除其中一个addAttribute的调用(无关紧要),以便我只指定一个字符串范围以具有背景颜色属性,则不显示背景颜色字符串中的任何地方。

enter image description here

我在iOS 8.1上,这发生在模拟器和我的iPhone 6上。我在我的代码中发现了这个问题,并在空项目中仅使用上面的代码片段重现了它。

有什么想法吗?我把头发拉到这里。这是问题的精简版本,但对于我的项目来说,能够拥有只有一个区域具有背景颜色的字符串非常重要。

编辑如果我将其中一种背景颜色设置为UIColor.clearColor(),则所有颜色都按预期工作。我可能正在看UIKit中的一个错误吗?

2 个答案:

答案 0 :(得分:2)

首先,您需要在整个文本中使用透明色应用NSBackgroundColorAttributeName

[s addAttribute:NSBackgroundColorAttributeName value:[UIColor clearColor] range:(NSRange){0, s.length}];

然后,您可以应用第二种颜色以及要突出显示的文本范围。

[s addAttribute:NSBackgroundColorAttributeName value:[UIColor yellowColor] range:(NSRange){0, 2}];

注意: 我在Objective-C中写了答案,因为我还不能习惯Swift的语法。

答案 1 :(得分:0)

这也是你的错误:

这样做:

self.detailDescriptionLabel.numberOfLines = 2; // <---

你的问题解决了。