有没有办法让textColor
的{{1}}属性为两个不同的UILabel
?基本上我正在尝试将UIColors
UILabel
中的第一个字符设为text property
,其余字符为greenColor
。我想避免使用两个不同的blackColor
,因为我可能想要更改绿色字符文本中的位置。
答案 0 :(得分:7)
从ios 6开始,您可以执行以下操作:
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
[attributedString addAttribute:NSBackgroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0,3)];
[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blackColor] range:NSMakeRange(4,9)];
cell.label.attributedText = attributedString;
答案 1 :(得分:4)
UILabel不支持此属性......
使用应该使用NSAttributedString ...并使用控制器绘制NSAttributesString ...
Controller for NSAttributedString
<强>更新强>
从iOS 6开始,您可以执行以下操作:
label.attributedText = attributedString;
答案 2 :(得分:2)
NSAttributedStrings支持相同字符串中的混合字体,样式和颜色,但目前任何标准UIKit控件都不支持。也就是说,你应该看看TTTAttributedLabel。它是UILabel的一个简单,高效的替代品,可以让您轻松地显示富文本。
答案 3 :(得分:1)
不 - 如果您需要格式化文本,Apple会说您应该在UIWebView
中使用HTML。 (请参阅UITextView API docs的概述部分中的注释。)
答案 4 :(得分:1)
另一种替代方法是创建具有不同颜色的多个标签,并将它们布置在彼此旁边。尝试使标签的背景颜色透明。这可能很乏味但应该有效。
答案 5 :(得分:1)
Swift 3 :
extension NSMutableAttributedString {
func setColorForText(textToFind: String, withColor color: UIColor) {
let range: NSRange = self.mutableString.range(of: textToFind, options: .caseInsensitive)
if range != nil {
self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range)
}
}
}
func setColoredLabel() {
var string: NSMutableAttributedString = NSMutableAttributedString(string: "My label with red blue and green colored text")
string.setColorForText(textToFind: "red", withColor: UIColor.red)
string.setColorForText(textToFind: "blue", withColor: UIColor.blue)
string.setColorForText(textToFind: "green", withColor: UIColor.green)
mylabel.attributedText = string
}
<强>结果:强>
答案 6 :(得分:0)
不,这是不可能的 - 您需要自己绘画或使用多个标签撰写。
如果您可以接受3.2兼容性,则可以查看NSAttributedString
。
答案 7 :(得分:0)
当前不可能,通常你会使用NSAttributedString,但要在iOS上使用它,你需要滚动自己的标签。你可以使用UIWebView来解决这个问题,但是我不喜欢这样做,看起来很苛刻。