带有两种不同颜色文本的UILabel

问题描述 投票:0回答:6

我怎样才能拥有具有两种不同颜色字体的

UILabel
?我将在两个不同的字符串中包含文本,我想将第一个字符串设为red,第二个字符串设为green。两个字符串的长度都是可变的。

ios xcode uilabel nsattributedstring textcolor
6个回答
8
投票

尝试TTTAttributedLabel。它是 UILabel 的子类,支持

NSAttributedString
,这使得在同一字符串中可以轻松拥有多种颜色、字体和样式。


编辑:或者,如果您不想要第 3 方依赖项并且目标是 iOS 6,则

UILabel
现在具有
attributedText
属性。


7
投票

您不能在

UILabel
秒内完成此操作。但我的建议是,不要使用多个
UILabel
,而是专注于
NSAttributedString
。找到绘制
UIControllers
NSAttributedString
,因为
UILabel
UITextView
不支持
NSAttributedString

PS:如果您计划分发 iOS6 或更高版本的应用程序,由于 UILabel 现在支持 NSAttributedString,您应该直接使用 UILabel 而不是 OHAttributedLabel,因为它现在由操作系统本机支持。


4
投票

UILabel 只能有一种颜色。您要么需要更复杂的元素,要么(可能更简单)只需使用两个单独的标签。使用

[yourLabel sizeToFit];
并相应地放置它们。


1
投票

斯威夫特4
注意:属性字符串键的表示法在 swift 4 中已更改

这是

NSMutableAttributedString
的扩展,可以在字符串/文本上添加/设置颜色。

extension NSMutableAttributedString {

    func setColor(color: UIColor, forText stringValue: String) {
        let range: NSRange = self.mutableString.range(of: stringValue, options: .caseInsensitive)
        self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range)
    }

}

现在,使用

UILabel
尝试上面的扩展并查看结果

let label = UILabel()
label.frame = CGRect(x: 40, y: 100, width: 280, height: 200)
let red = "red"
let blue = "blue"
let green = "green"
let stringValue = "\(red)\n\(blue)\n&\n\(green)"
label.textColor = UIColor.lightGray
label.numberOfLines = 0
let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue)
attributedString.setColor(color: UIColor.red, forText: red)   // or use direct value for text "red"
attributedString.setColor(color: UIColor.blue, forText: blue)   // or use direct value for text "blue"
attributedString.setColor(color: UIColor.green, forText: green)   // or use direct value for text "green"
label.font = UIFont.systemFont(ofSize: 26)
label.attributedText = attributedString
self.view.addSubview(label)


这是 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(NSForegroundColorAttributeName, value: color, range: range)
          }
        }

}


func multicolorTextLabel() {
        var string: NSMutableAttributedString = NSMutableAttributedString(string: "red\nblue\n&\ngreen")
        string.setColorForText(textToFind: "red", withColor: UIColor.red)
        string.setColorForText(textToFind: "blue", withColor: UIColor.blue)
        string.setColorForText(textToFind: "green", withColor: UIColor.green)
        labelObject.attributedText = string
    }

结果:

enter image description here


0
投票

在 iOS 6 中 UILabel 有 NSAttributedString 属性。所以就用它吧。


0
投票

斯威夫特5

extension NSMutableAttributedString {
    func setColor(color: UIColor, forText stringValue: String) {
        let range: NSRange = self.mutableString.range(of: stringValue, options: .caseInsensitive)
        self.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.