Trabajar con texto es una tarea clave al crear interfaces de aplicaciones móviles modernas. Desde la selección de fuentes hasta el ajuste del espaciado entre caracteres, cada aspecto afecta la percepción del producto. Según la Documentación de Apple NSAttributedString, un formato de texto adecuado está directamente relacionado con la legibilidad y la accesibilidad de la interfaz.
Puntos clave
NSAttributedString es la clase fundamental de iOS para trabajar con texto formateado. Permite aplicar atributos a caracteres o rangos individuales: fuente mediante UIFont, color mediante UIColor, espaciado entre caracteres mediante kern y espaciado entre líneas mediante NSMutableParagraphStyle. En las aplicaciones móviles, NSAttributedString se utiliza en todas partes, desde UILabel hasta complejos UITextView con soporte de edición.
UIFont es la clase principal para trabajar con fuentes en iOS. Admite tipografías del sistema, fuentes personalizadas y Dynamic Type. UIFont(name:size:) carga una fuente por nombre, UIFont.systemFont(ofSize:weight:) carga la fuente del sistema. UIFontDescriptor permite modificar una fuente existente: cambiar tamaño, peso o añadir una matriz de transformación. Para fuentes personalizadas, el archivo .ttf se añade al proyecto y se registra en Info.plist bajo la clave Fonts provided by application.
let attributes: [NSAttributedString.Key: Any] = [
.font: UIFont(name: "HelveticaNeue-Bold", size: 18) as Any,
.foregroundColor: UIColor.darkGray as Any,
.kern: 1.5 as Any
]
let attributedString = NSAttributedString(
string: "Форматированный текст",
attributes: attributes
)
label.attributedText = attributedString
NSMutableParagraphStyle es una versión mutable de ParagraphStyle para configurar la visualización de párrafos. Controla la alineación (alignment), el espaciado entre líneas (lineSpacing), las sangrías (headIndent, tailIndent) y el modo de truncamiento (lineBreakMode). ParagraphStyle es fundamental para la legibilidad de textos largos en dispositivos móviles: un lineSpacing adecuado evita la fusión de líneas, y lineBreakMode evita el recorte de palabras. La configuración de paragraphSpacing define el espacio entre párrafos.
SpannableString es la herramienta principal para formatear texto en Android. Funciona mediante un mecanismo de objetos Span, cada uno responsable de un aspecto: StyleSpan para negrita o cursiva, ForegroundColorSpan para color, URLSpan para enlaces, UnderlineSpan para subrayado. SpannableStringBuilder es el equivalente de NSMutableAttributedString, que permite construir texto a partir de múltiples fragmentos. Comprender SpannableString es esencial para crear interfaces flexibles con texto formateado en aplicaciones móviles.
Typeface es la clase para trabajar con fuentes en Android. Admite las tipografías del sistema Roboto y Noto, así como fuentes personalizadas. Typeface.createFromResource() carga una fuente desde res/font/, Typeface.createFromAsset() desde la carpeta assets. Android 8.0+ admite familias de fuentes en XML, combinando múltiples archivos de fuente en un solo recurso. Una fuente personalizada para texto en aplicaciones móviles en Android se establece mediante el atributo android:fontFamily o mediante programación con setTypeface().
TextMeasurer (API 29+) es una herramienta moderna para medir texto sin vincularse a una View. Calcula el ancho, la altura y las posiciones de los caracteres antes del renderizado. En APIs antiguas, se usa Paint.measureText() para texto de una sola línea o StaticLayout para texto multilínea. TextMeasurer es especialmente útil en Views personalizadas donde el texto se dibuja mediante Canvas.drawText(). Una medición correcta evita el recorte de caracteres en la interfaz.
val spannable = SpannableString("Жирный текст с цветом")
spannable.setSpan(
StyleSpan(Typeface.BOLD),
0, 6,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
spannable.setSpan(
ForegroundColorSpan(Color.RED),
14, 19,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
textView.text = spannable
La tipografía en las aplicaciones móviles es una configuración integral de fuentes, espaciado entre caracteres y entre líneas. Una tipografía adecuada en el desarrollo móvil afecta directamente la legibilidad del texto y la percepción visual de la interfaz. Veamos los parámetros clave disponibles en ambas plataformas.
Kerning es el ajuste del espacio entre pares de caracteres específicos (AV, To, Wa). Tracking es el espaciado uniforme entre caracteres para todo el texto o una parte del mismo. En iOS, el kerning se define mediante NSKernAttributeName, en Android, mediante la propiedad letterSpacing de TextView. Los valores negativos acercan los caracteres, los positivos los separan. La tipografía en el desarrollo móvil requiere un ajuste cuidadoso de estos parámetros: para los títulos grandes, el espaciado entre caracteres suele aumentarse, para el texto del cuerpo se mantiene estándar.
| Parámetro | iOS | Android |
|---|---|---|
| Cadena estilizada | NSAttributedString | SpannableString |
| Fuente | UIFont / CTFont | Typeface |
| Espaciado entre caracteres | NSKernAttributeName | letterSpacing |
| Espaciado entre líneas | lineSpacing | lineSpacingExtra |
| Ligaduras | NSLigatureAttributeName | Características OpenType |
| Elipsis | lineBreakMode .byTruncatingTail | android:ellipsize |
Las ligaduras son glifos especiales que reemplazan combinaciones de dos o más caracteres: fi, fl, ffi. En iOS, las ligaduras se controlan mediante NSLigatureAttributeName: 0 — desactivadas, 1 — estándar, 2 — todas disponibles. En Android, las ligaduras se controlan a nivel de fuente mediante características OpenType. Activar las ligaduras mejora la apariencia del texto, especialmente en tipografías con serifas. La tipografía en el desarrollo móvil utiliza ligaduras principalmente para títulos y logotipos.
Las fuentes personalizadas son una de las principales herramientas para crear un estilo visual único en una aplicación. Ayudan a destacar la marca y mejorar la experiencia del usuario. En las aplicaciones móviles, las fuentes personalizadas se utilizan para títulos, logotipos, elementos de acento e identidad corporativa.
Variable Fonts es una tecnología moderna de fuentes donde un solo archivo contiene múltiples estilos: desde fino hasta extranegro, desde estrecho hasta ancho. Esto reduce el tamaño de la aplicación al reemplazar varios archivos de fuente por uno solo. En iOS, las Variable Fonts son compatibles mediante UIFont con el parámetro weight. En Android, mediante Typeface.Builder especificando los ejes de variabilidad wght, wdth, slnt. El uso de Variable Fonts simplifica la tipografía en las aplicaciones móviles: el desarrollador no necesita cargar archivos separados para cada estilo.
let customFont = UIFont(name: "CustomFont-Regular", size: 16)
let scaledFont = UIFontMetrics.default
.scaledFont(for: customFont)
label.font = scaledFont
label.adjustsFontForContentSizeCategory(true)
NSTextAttachment en iOS permite incrustar UIImage dentro de NSAttributedString: la imagen se alinea con la línea base y se desplaza junto con el texto. En Android, el equivalente es ImageSpan dentro de SpannableString. Ambos enfoques son útiles para chats con emojis, feeds de noticias con iconos y formularios con casillas de verificación personalizadas. Es importante escalar correctamente la imagen para que coincida con la altura de la fuente, de modo que el texto y los gráficos se vean armoniosos.
Además del formato básico, el texto en aplicaciones móviles admite efectos visuales adicionales: sombras, contornos, tachado y subrayado. Estas herramientas amplían las posibilidades de la tipografía, pero requieren una aplicación cuidadosa para mantener la legibilidad.
La sombra del texto en iOS se define mediante NSShadow con offset, blurRadius y color. El contorno se define mediante NSStrokeWidthAttributeName: los valores negativos crean un relleno con contorno, los positivos solo el contorno. El tachado se define con NSUnderlineStyle (.single, .thick, .double). En Android, la sombra de TextView se configura mediante android:shadowRadius, android:shadowDx, android:shadowDy. SpannableString admite StrikethroughSpan y UnderlineSpan. El contorno del texto en Android se implementa mediante OutlineSpan o una fuente personalizada.
La elipsis es el truncamiento de texto con puntos suspensivos cuando el contenedor se desborda. En iOS, se configura mediante lineBreakMode .byTruncatingTail y numberOfLines. En Android, mediante android:ellipsize="end" y android:maxLines. Marquee es una animación de desplazamiento de texto disponible en Android mediante android:ellipsize="marquee". En iOS no hay un equivalente integrado: se utiliza la biblioteca MarqueeLabel. La elipsis es obligatoria para todos los textos de una sola línea en aplicaciones móviles para evitar el recorte de contenido.
Dynamic Type es un sistema de texto adaptativo en iOS que ajusta el tamaño de la fuente según la configuración de Accesibilidad del usuario. Use UIFontMetrics para escalar fuentes personalizadas. Dynamic Type es obligatorio para las aplicaciones compatibles con Accesibilidad. En Android, el equivalente son las unidades sp y scaledPixels, que se escalan según la configuración del sistema de tamaño de texto.
Preguntas frecuentes
NSAttributedString es una clase de iOS para crear texto formateado con atributos de fuente, color y estilo a nivel de caracteres y rangos.
SpannableString es una clase de Android para marcar texto mediante objetos Span: ForegroundColorSpan, StyleSpan, URLSpan, UnderlineSpan.
Añada el archivo .ttf al proyecto, especifíquelo en Info.plist bajo la clave Fonts provided by application, luego use UIFont(name:).
Coloque el archivo .ttf en res/font/, cree una familia de fuentes XML y especifique android:fontFamily o use Typeface.createFromAsset().
Kerning es el espacio entre pares de caracteres. Ligaduras son glifos especiales para combinaciones de letras. Se controlan mediante NSKernAttributeName y NSLigatureAttributeName.
Resumen
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.