1

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

此代码有效:

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 上。我在我的代码中发现了这个问题,并在一个空项目中仅使用上面的代码片段重现了它。

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

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

4

2 回答 2

2

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

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

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

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

对于斯威夫特

mutableAttributedString.addAttribute(NSAttributedString.Key.backgroundColor, value: UIColor.clear , range: {0, 2})

mutableAttributedString.addAttribute(NSAttributedString.Key.backgroundColor, value: UIColor.yellow , range: {0, 2})
于 2015-02-07T04:17:09.963 回答
0

这也是你的错误:

只需这样做:

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

你的问题解决了。

于 2015-02-07T04:21:01.060 回答