UILabel с двумя разными цветами текста - PullRequest
6 голосов
/ 17 октября 2010

Как мне получить UILabel с двумя разными цветами для шрифта? У меня будет текст в двух разных строках, и я хочу сделать текст с первой строкой как красный и второй как зеленый . Длина обеих строк является переменной.

Ответы [ 5 ]

8 голосов
/ 09 мая 2011

Попробуйте TTTAttributedLabel .Это подкласс UILabel, который поддерживает NSAttributedString s, что позволяет легко иметь несколько цветов, шрифтов и стилей в одной строке.


Редактировать: в качестве альтернативы, если вы не хотитесторонняя зависимость и ориентированная на iOS 6, UILabel теперь имеет свойство attributedText.

7 голосов
/ 15 ноября 2010

Вы не можете сделать это в течение UILabel с. Но я предлагаю вместо использования нескольких UILabel просто сконцентрироваться на NSAttributedString. Найдите UIControllers, который тянет NSAttributedString, потому что UILabel, UITextView не поддерживают NSAttributedString.

PS: если вы планируете распространять приложение iOS6 или новее, поскольку UILabel теперь поддерживает NSAttributedString, вам следует использовать UILabel напрямую вместо OHAttributedLabel, поскольку теперь он поддерживается самой операционной системой.

4 голосов
/ 17 октября 2010

UILabel может иметь только один цвет.Вам либо нужен более сложный элемент, либо - возможно, проще - просто используйте две отдельные метки.Используйте [yourLabel sizeToFit]; и разместите их соответственно.

1 голос
/ 06 июля 2017

Swift 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)


Вот решение в Swift3 :

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 голосов
/ 26 июня 2013

В iOS 6 UILabel имеет свойство NSAttributedString. Так что используйте это.

...