我遇到了令人沮丧的问题。我想要一个标签来显示一个文本字符串,其中部分字符串具有不同的背景颜色。
此代码有效:
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中的一个错误吗?
答案 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; // <---
你的问题解决了。