¿Cómo puedo tener un UILabel
con dos colores diferentes para la fuente? Tendré texto en dos cadenas diferentes y quiero hacer texto con la primera cadena como rojo y el segundo como verde. La longitud de ambas cadenas es variable.UILabel con texto de dos colores diferentes
Respuesta
No puede hacer esto dentro de un UILabel
s. Pero mi sugerencia es que, en lugar de usar UILabel
, solo concéntrese en NSAttributedString
. Busque UIControllers
que dibuja NSAttributedString
porque UILabel
, UITextView
no admite NSAttributedString
.
PD: si va a distribuir una aplicación iOS 6 o posterior, como UILabel ahora son compatibles con NSAttributedString, se debe utilizar UILabel directamente en lugar de OHAttributedLabel como ahora es compatible de forma nativa por el sistema operativo.
Esta respuesta ya no es correcta porque, por ejemplo, UILabel admite NSAttributedString desde iOS 6. – brainray
@brainray He actualizado la respuesta a fines del año mismo. Compruébelo por favor. – KingofBliss
UILabel solo puede tener un color. O necesita un elemento más sofisticado o, probablemente más fácil, simplemente use dos etiquetas separadas. Use [yourLabel sizeToFit];
y colóquelos según corresponda.
okkk intentaré explorar la propiedad sizeToFit de uilabel, gracias por responder – pankaj
Probar TTTAttributedLabel. Es una subclase de UILabel que admite NSAttributedString
s, lo que facilitaría tener varios colores, fuentes y estilos en la misma cadena.
Editar: Como alternativa, si no desea que la tercera parte y la dependencia está apuntando el IOS 6, UILabel
ahora tiene la propiedad attributedText
.
Bueno. NSAttributedString es definitivamente el camino a seguir, y la clase que sugieres parece muy agradable. – iceydee
En iOS 6, UILabel tiene la propiedad NSAttributedString. Entonces usa eso.
Swift 4
(Nota: notación para una cadena con atributos clave se cambia en rápida 4)
Aquí es una extensión para NSMutableAttributedString
, que se suman/juego de colores en la cuerda/texto.
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)
}
}
Ahora, trata por encima de la extensión con UILabel
y ver el resultado
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)
Aquí está la solución de 3 Swift:
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
}
Resultado:
Acabo de probar esto en iOS 11 y obtuve un error en la extensión .. self.addAttributes ([NSForegroundColorAttributeName: color], range: range) – August
@August - Comparta el mensaje de error. También avíseme la versión rápida de su proyecto. Puede estar intentando con la extensión Swift 3 y su proyecto tiene Swift 4. Comparta información relacionada con el error, para que pueda ayudarlo. – Krunal
Sí, es un proyecto Swift 4 y usó la extensión Swift 4 que compartió. Fue un error de sintaxis, no un error de compilación/tiempo de ejecución. Doc »https://developer.apple.com/documentation/foundation/nsmutableattributedstring/1414304-addattributes – August
- 1. UILabel con el texto de dos colores diferentes
- 2. iPhone CGContext: dibujo dos líneas con dos colores diferentes
- 3. Disposición con diferentes colores
- 4. Cómo dibujar texto con diferentes colores de trazo y relleno?
- 5. QTextEdit con diferentes colores de texto (Qt/C++)
- 6. Cómo mostrar texto con fondo de dos colores?
- 7. Botón Android con diferentes colores de fondo
- 8. ¿es posible establecer múltiples colores en UILabel?
- 9. ¿Puede la vista de texto tener letras en diferentes colores?
- 10. dos líneas en un texto de botón con diferentes tamaños
- 11. Bordes de dos colores
- 12. Android - ListView con 2 colores diferentes
- 13. banda de fondo con dos colores?
- 14. Android: botón con dos colores de fondo
- 15. iOS - Uso de TTTAttributedLabel para establecer dos colores de texto
- 16. ¿Cómo configuro diferentes colores para texto y subrayado en JTextPane?
- 17. UILabel parte visible del texto
- 18. ¿Cómo puedo tener un tema global con diferentes colores de texto de TextView y Spinner?
- 19. Dos colores en un campo de texto usando Actionscript 3
- 20. ¿Cómo puedo dibujar texto con diferentes trazos y rellenar colores en las imágenes con python?
- 21. Dos colores en un nodo con el punto de graphviz?
- 22. Opacidad diferente para UILabel y el texto de UILabel
- 23. Anotaciones de vista de mapa con diferentes colores de pin
- 24. Justificar texto en UILabel iOS
- 25. UILabel personalizado no muestra texto
- 26. UILabel Alinear texto al centro
- 27. Esquema para el texto UILabel
- 28. UILabel multilínea con ajustesFontSizeToFitWidth
- 29. Creando un gráfico con bordes de diferentes colores en Mathematica
- 30. Alignment de texto de párrafo de UILabel
Tuve que hacer eso también en un proyecto. Utilicé esta clase de otra publicación, pero es solo para una línea ** única **, no sé si es suficiente para ti. [iPhone - UILabel contiene texto con varias fuentes al mismo tiempo] (http://stackoverflow.com/questions/1417346/iphone-uilabel-containing-text-with-multiple-fonts-at-the-same-time) –