Attributed Text: qué es, tipos de atributos y estilización

Autor: IT Sectr Publicado: 2026-07-23 Tiempo de lectura: 8 min

Attributed Text es un mecanismo del SDK de iOS, representado por las clases NSAttributedString y NSMutableAttributedString, que permite aplicar múltiples estilos a diferentes partes de una misma cadena de texto. A diferencia de un NSString común, Attributed String almacena no solo caracteres, sino también un diccionario de atributos para cada rango: fuente, color, interlineado, sombra y alineación. Según la Documentación para Desarrolladores de Apple, Attributed String es la base para mostrar texto formateado en UILabel, UITextView y UITextField. Es la forma estándar de estilizar texto sin WebKit ni bibliotecas de terceros.

Puntos Clave

  • NSAttributedString — una clase inmutable para estilizar texto mediante diccionarios de atributos en iOS
  • Los atributos incluyen fuente, color, interlineado, sombra, subrayado y alineación
  • NSMutableAttributedString — una versión mutable para aplicar estilos dinámicamente
  • addAttributes aplica un diccionario de atributos a un rango, addAttribute aplica un solo atributo
  • NSAttributedString se usa en UILabel, UITextView, UITextField y Core Text

¿Qué es Attributed Text en iOS?

NSAttributedString es una clase del framework Foundation que representa una cadena con un conjunto de atributos nombrados vinculados a rangos de caracteres. Cada atributo es un par clave-valor: la clave está definida por una constante (NSFontAttributeName, NSForegroundColorAttributeName) y el valor es el objeto correspondiente (UIFont, UIColor). Los atributos se aplican a un rango de caracteres mediante NSRange.

La clase está disponible en todas las plataformas Apple: iOS (2.0+), macOS, tvOS, watchOS. NSAttributedString es inmutable — una vez creado, sus atributos son fijos. Para cambios dinámicos se utiliza NSMutableAttributedString, que hereda de NSAttributedString y añade los métodos setAttributes, addAttributes, addAttribute, removeAttribute.

Diferencia con NSString

NSString es una cadena simple de caracteres sin información de estilo. Cualquier texto pasado a UILabel a través de text se muestra con una sola fuente, color y tamaño. NSAttributedString, pasado a través de attributedText, permite que cada carácter tenga su propio conjunto de atributos. UILabel, UITextView y UITextField reconocen automáticamente NSAttributedString y renderizan el texto según sus atributos.

Formato de Almacenamiento

Internamente, NSAttributedString almacena un NSString con el texto y un array de rangos de atributos. Cada rango está representado por una estructura NSRange y un diccionario de atributos. Durante el renderizado, el sistema recorre los rangos y aplica los atributos correspondientes a cada sección. La eficiencia depende de la cantidad de cambios de atributos — los cambios frecuentes en secciones cortas aumentan el tiempo de renderizado.

Atributos de NSAttributedString

Los atributos de NSAttributedString son constantes definidas en UIKit (iOS) y AppKit (macOS), cada una correspondiente a un aspecto específico del estilo visual del texto. Todos los atributos son cadenas NSAttributedString.Key, y sus valores son objetos de clases específicas. Los atributos se dividen en de carácter (afectan a los caracteres) y de párrafo (afectan a los párrafos).

Los atributos de carácter incluyen fuente (NSFontAttributeName), color de texto (NSForegroundColorAttributeName), color de fondo (NSBackgroundColorAttributeName), subrayado (NSUnderlineStyleAttributeName), tachado (NSStrikethroughStyleAttributeName), sombra (NSShadowAttributeName). Los atributos de párrafo se establecen mediante NSParagraphStyleAttributeName, que controla la alineación, sangría, interlineado y tabulación.

Atributos de Enlace e Interactividad

NSLinkAttributeName crea un enlace cliqueable en el texto: el valor es una URL o cadena. UITextView maneja automáticamente dichos enlaces si la interacción está habilitada. NSAttachmentAttributeName permite incrustar un NSTextAttachment — una imagen dentro del texto que se renderiza como elemento en línea. Esto se usa para crear texto con iconos, emojis o vistas personalizadas dentro de una cadena.

Atributos Básicos de Estilización

Cada atributo de NSAttributedString tiene un valor estrictamente tipado. Veamos los atributos más utilizados en el desarrollo de iOS. La fuente se establece mediante un objeto UIFont, el color mediante UIColor, el interlineado mediante NSMutableParagraphStyle, que permite configurar alineación, sangría y espaciado en un solo objeto.

Clave del AtributoTipo de ValorPropósito
NSFontAttributeNameUIFontFuente del texto
NSForegroundColorAttributeNameUIColorColor del texto
NSBackgroundColorAttributeNameUIColorColor de fondo detrás del texto
NSUnderlineStyleAttributeNameNSNumber (Int)Estilo de subrayado
NSParagraphStyleAttributeNameNSParagraphStyleConfiguración de párrafo
NSKernAttributeNameNSNumber (Float)Espaciado entre letras (kerning)

NSParagraphStyle

NSParagraphStyle es un contenedor para atributos de párrafo: alignment, lineSpacing, paragraphSpacing, firstLineHeadIndent, lineBreakMode, minimumLineHeight y otros. Para modificar estos parámetros, se crea un NSMutableParagraphStyle, se configuran las propiedades deseadas y el objeto se pasa como valor del atributo NSParagraphStyleAttributeName. Esta es la única forma de controlar el interlineado en NSAttributedString.

Sombra y Efectos

NSShadow permite añadir una sombra al texto: los parámetros shadowOffset, shadowBlurRadius, shadowColor establecen el desplazamiento, desenfoque y color de la sombra. Los atributos de subrayado y tachado aceptan combinaciones de estilos: NSUnderlineStyle.single, .double, .thick, .patternDash, .patternDot. Para un control preciso del grosor y color de las líneas se utilizan NSUnderlineColorAttributeName y NSStrikethroughColorAttributeName.

Cómo Usar NSAttributedString en Código

La creación de un NSAttributedString en Swift se realiza mediante un inicializador con el texto y un diccionario de atributos, o mediante NSMutableAttributedString con aplicación paso a paso de estilos. El enfoque básico es definir un diccionario de atributos para todo el texto, luego añadir o modificar atributos para rangos específicos.

Creación con Atributos para Todo el Texto

Un ejemplo simple — establecer fuente, color y alineación para toda la cadena. El diccionario de atributos se pasa al inicializador de NSAttributedString. Las claves del diccionario son constantes NSAttributedString.Key, los valores son objetos UIKit correspondientes. Este es el caso básico cuando todo el texto se formatea de manera uniforme.

swift
let attributes: [NSAttributedString.Key: Any] = [
    .font: UIFont.systemFont(ofSize: 16),
    .foregroundColor: UIColor.darkGray,
    .paragraphStyle: let style = NSMutableParagraphStyle()
    style.alignment = .center
    style.lineSpacing = 4
    return style
]
let attributedString = NSAttributedString(
    string: "Hello world",
    attributes: attributes
)
label.attributedText = attributedString

El texto se mostrará con la systemFont 16, color gris oscuro, alineación centrada e interlineado de 4pt. Este enfoque es útil para encabezados y botones estáticos.

Aplicación a un Rango

NSMutableAttributedString permite aplicar diferentes estilos a diferentes partes del texto. El método addAttribute añade un solo atributo a un rango, addAttributes añade un diccionario de atributos. El método setAttributes reemplaza todos los atributos de un rango por otros nuevos. Esta es la herramienta principal para crear texto con resaltados.

swift
let text = "Price: 1999 rubles"
let attributed = NSMutableAttributedString(string: text)
attributed.addAttribute(.foregroundColor,
    value: UIColor.green, range: NSRange(location: 6, length: 4))
attributed.addAttribute(.font,
    value: UIFont.boldSystemFont(ofSize: 20), range: NSRange(location: 6, length: 4))
label.attributedText = attributed

La palabra “1999” será verde y negrita, el resto del texto será estándar. NSRange se calcula manualmente — es importante contar correctamente la longitud en caracteres, especialmente al trabajar con emojis y caracteres Unicode compuestos.

Estilos Dinámicos con NSMutableAttributedString

NSMutableAttributedString proporciona métodos para cambiar dinámicamente el texto y los atributos: append, insert, replace, delete, setAttributes, addAttribute, removeAttribute, enumerateAttributes. Esto permite construir texto a partir de diferentes fuentes, combinar estilos y responder a eventos de la interfaz.

A diferencia de NSAttributedString inmutable, la versión mutable admite el cambio de contenido sin crear un nuevo objeto. Esto es crítico para editores de texto, chats y formularios donde el usuario puede editar el texto mientras los estilos deben conservarse.

Combinación de Estilos en un Chat

En los mensajeros, cada mensaje contiene el nombre de usuario (negrita), el texto del mensaje (normal) y la hora (color gris). NSMutableAttributedString permite construir dicha cadena de una sola vez añadiendo partes en el orden deseado con los atributos correspondientes.

swift
let result = NSMutableAttributedString()
let name = NSAttributedString(string: "Anna: ",
    attributes: [.font: UIFont.boldSystemFont(ofSize: 15)])
let message = NSAttributedString(string: "Hello, how are you?",
    attributes: [.font: UIFont.systemFont(ofSize: 15)])
let time = NSAttributedString(string: " 12:30",
    attributes: [.foregroundColor: UIColor.gray])
result.append(name)
result.append(message)
result.append(time)
label.attributedText = result

El resultado es una única cadena con tres secciones estilizadas. Append calcula NSRange automáticamente, no es necesario calcular las posiciones manualmente. Este enfoque escala a cualquier número de fragmentos.

Enumeración de Atributos

El método enumerateAttributes(in:options:using:) recorre todos los rangos de atributos en el intervalo especificado. Esto es útil para analizar el formato: encontrar todos los enlaces, cambiar el color de atributos específicos o exportar texto a HTML. En el closure se reciben el diccionario de atributos y el NSRange de la sección actual.

Attributed Text en Componentes UI de UIKit

Todos los componentes principales de UI para mostrar texto en UIKit admiten NSAttributedString a través de la propiedad attributedText. UILabel muestra texto estilizado estático, UITextView admite edición y enlaces, UITextField acepta atributos para el placeholder y el texto ingresado por separado.

UILabel con attributedText

UILabel es el componente más ligero para mostrar texto estilizado. Admite todos los atributos de carácter, pero no maneja enlaces cliqueables automáticamente (se necesita UITextView para eso). UILabel es ideal para encabezados, etiquetas y textos cortos con formato.

UITextView con Enlaces

UITextView maneja NSLinkAttributeName y muestra los enlaces como elementos interactivos. Para habilitar esta funcionalidad, establezca isSelectable = true e isEditable = false. Al tocar un enlace, el delegado recibe la llamada textView(_:shouldInteractWith:in:interaction:). UITextView también admite NSTextAttachment para imágenes dentro del texto.

swift
let text = "Details on developer.apple.com"
let attributed = NSMutableAttributedString(string: text)
attributed.addAttribute(.link,
    value: URL(string: "https://developer.apple.com")!,
    range: NSRange(location: 0, length: text.count))
textView.attributedText = attributed
textView.isSelectable = true
textView.isEditable = false

Después de configurar isSelectable e isEditable, el área de texto se comporta como un bloque de texto estático, pero los enlaces permanecen activos. UITextViewDelegate controla el comportamiento al tocar.

Integración con Core Text

Core Text es un framework de bajo nivel de Apple para renderizado de texto que trabaja directamente con NSAttributedString. A diferencia de UIKit, Core Text no utiliza NSAttributedString directamente como objeto de visualización — en su lugar, lo convierte en un CTFramesetter, luego en CTFrame y lo renderiza en un contexto de Core Graphics. Esto brinda control total sobre la disposición de líneas y glifos.

El uso de Core Text está justificado para diseños de texto personalizados: columnas, ajuste de imágenes, rotación de texto, saltos de línea no estándar. El NSMutableParagraphStyle de Core Text incluye atributos que no están en UIKit: kCTParagraphStyleSpecifierMaximumLineSpacing, kCTParagraphStyleSpecifierLineBreakMode con modos adicionales.

Conversión entre UIKit y Core Text

NSAttributedString se transfiere sin problemas entre UIKit y Core Text, ya que ambos frameworks trabajan con el mismo tipo. Los atributos de UIKit (NSFontAttributeName, NSForegroundColorAttributeName) son reconocidos automáticamente por Core Text, y viceversa — los atributos de Core Text (kCTFontAttributeName) son leídos por UIKit. Esto permite usar UIKit para tareas simples y Core Text para renderizado personalizado en el mismo objeto NSAttributedString.

Preguntas Frecuentes

¿En qué se diferencia NSAttributedString de NSString?

NSString almacena solo texto sin información de estilo. NSAttributedString complementa el texto con un diccionario de atributos para cada rango de caracteres. Cuando se pasa a UILabel a través de la propiedad text, NSString se muestra como texto plano. Cuando se pasa NSAttributedString a través de attributedText, se aplican todos los atributos: diferentes fuentes, colores y espaciados en una sola cadena.

¿Cómo añadir varios atributos a un solo rango?

Use el método addAttributes(_:range:) con un diccionario de atributos: addAttributes([.font: font, .foregroundColor: color], range: range). Para añadir o cambiar un solo atributo, use addAttribute(_:value:range:). El método setAttributes reemplaza todos los atributos existentes en el rango por los proporcionados.

¿Cómo cambiar el interlineado en NSAttributedString?

Cree un NSMutableParagraphStyle, establezca la propiedad lineSpacing, luego páselo como valor del atributo NSParagraphStyleAttributeName. Para un control total, también están disponibles minimumLineHeight, maximumLineHeight, paragraphSpacing, lineBreakMode y alignment. ParagraphStyle es la única forma de controlar el interlineado.

¿Funcionan los atributos en SwiftUI?

Sí, SwiftUI admite NSAttributedString a través de Text(attributedString:) en iOS 15+. En versiones anteriores, use UIViewRepresentable con UILabel o UITextView. SwiftUI también proporciona su propio tipo AttributedString (SwiftUI, no Foundation) para formato declarativo con sintaxis similar a Markdown.

¿Cómo calcular el tamaño de NSAttributedString?

Use el método boundingRect(with:options:context:), que devuelve el CGRect necesario para mostrar la cadena con los atributos dados. El parámetro options: [.usesLineFragmentOrigin, .usesFontLeading] tiene en cuenta el interlineado y las métricas de fuente. Para UILabel con un número limitado de líneas, use sizeThatFits.

Resumen

  • NSAttributedString — una clase de Foundation para estilizar texto mediante diccionarios de atributos en iOS
  • Los atributos incluyen fuente (UIFont), color (UIColor), subrayado, sombra y configuraciones de párrafo
  • NSMutableAttributedString — una versión dinámica para añadir y eliminar atributos
  • addAttributes(_:range:) aplica un diccionario de atributos a un rango de caracteres
  • NSParagraphStyle controla el interlineado, la alineación y la sangría
  • UILabel, UITextView, UITextField admiten attributedText para mostrar estilos
  • Core Text utiliza el mismo NSAttributedString para renderizado de bajo nivel

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también