Работа с текстом — ключевая задача при создании интерфейсов современных мобильных приложений. От выбора шрифта до настройки межсимвольных интервалов — каждый аспект влияет на восприятие продукта. По данным Apple NSAttributedString Documentation, правильное форматирование текста напрямую связано с читаемостью и доступностью интерфейса.
Главное
NSAttributedString — фундаментальный класс iOS для работы с форматированным текстом. Он позволяет применять атрибуты к отдельным символам или диапазонам: шрифт через UIFont, цвет через UIColor, межсимвольное расстояние через kern и межстрочный интервал через NSMutableParagraphStyle. В мобильных приложениях NSAttributedString используется повсеместно — от UILabel до сложных UITextView с поддержкой редактирования.
UIFont — основной класс для работы со шрифтами на iOS. Он поддерживает системные гарнитуры, кастомные шрифты и Dynamic Type. UIFont(name:size:) загружает шрифт по имени, UIFont.systemFont(ofSize:weight:) — системный шрифт. UIFontDescriptor позволяет модифицировать существующий шрифт: изменить размер, начертание или добавить матрицу трансформации. Для кастомных шрифтов файл .ttf добавляется в проект и регистрируется в Info.plist через ключ 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 — изменяемая версия ParagraphStyle для настройки отображения абзацев. Он управляет выравниванием (alignment), межстрочным интервалом (lineSpacing), отступами (headIndent, tailIndent) и режимом обрезки (lineBreakMode). ParagraphStyle критически важен для читаемости длинных текстов на мобильных устройствах: правильный lineSpacing предотвращает слияние строк, а lineBreakMode — обрезание слов. Настройка paragraphSpacing задаёт отступ между абзацами.
SpannableString — основной инструмент для форматирования текста на Android. Он работает через механизм Span-объектов, каждый из которых отвечает за один аспект: StyleSpan — жирный или курсив, ForegroundColorSpan — цвет, URLSpan — ссылка, UnderlineSpan — подчёркивание. SpannableStringBuilder — аналог NSMutableAttributedString, позволяющий строить текст из нескольких фрагментов. Понимание SpannableString необходимо для создания гибких интерфейсов с форматированным текстом в мобильных приложениях.
Typeface — класс для работы со шрифтами на Android. Он поддерживает системные гарнитуры Roboto и Noto, а также кастомные шрифты. Typeface.createFromResource() загружает шрифт из res/font/, Typeface.createFromAsset() — из папки assets. Android 8.0+ поддерживает шрифтовые семейства в XML, объединяющие несколько файлов шрифта в один ресурс. Кастомный шрифт для текста в мобильных приложениях на Android задаётся через атрибут android:fontFamily или программный вызов setTypeface().
TextMeasurer (API 29+) — современный инструмент для измерения текста без привязки к View. Он вычисляет ширину, высоту и позиции символов до отрисовки. На старых API используется Paint.measureText() для однострочного текста или StaticLayout для многострочного. TextMeasurer особенно полезен в кастомных View, где текст рисуется через Canvas.drawText(). Корректное измерение предотвращает обрезание символов в интерфейсе.
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
Типографика в мобильных приложениях — это комплексная настройка шрифтов, межсимвольных и межстрочных интервалов. Правильная типографика в мобильной разработке напрямую влияет на читаемость текста и визуальное восприятие интерфейса. Рассмотрим ключевые параметры, доступные на обеих платформах.
Кернинг — изменение расстояния между конкретными парами символов (AV, To, Wa). Tracking — равномерное межсимвольное расстояние для всего текста или его фрагмента. На iOS кернинг задаётся через NSKernAttributeName, на Android — через свойство letterSpacing у TextView. Отрицательные значения сближают символы, положительные — расширяют. Типографика в мобильной разработке требует аккуратной настройки этих параметров: для крупных заголовков межсимвольное расстояние обычно увеличивают, для основного текста оставляют стандартным.
| Параметр | iOS | Android |
|---|---|---|
| Стилизованная строка | NSAttributedString | SpannableString |
| Шрифт | UIFont / CTFont | Typeface |
| Межсимвольный интервал | NSKernAttributeName | letterSpacing |
| Межстрочный интервал | lineSpacing | lineSpacingExtra |
| Лигатуры | NSLigatureAttributeName | OpenType фичи |
| Эллипсис | lineBreakMode .byTruncatingTail | android:ellipsize |
Лигатуры — специальные глифы, заменяющие сочетания двух и более символов: fi, fl, ffi. На iOS лигатуры управляются через NSLigatureAttributeName: 0 — отключены, 1 — стандартные, 2 — все доступные. На Android лигатуры контролируются на уровне шрифта через OpenType-фичи. Включение лигатур улучшает внешний вид текста, особенно в гарнитурах с засечками. Типографика в мобильной разработке использует лигатуры преимущественно для заголовков и логотипов.
Кастомные шрифты — один из главных инструментов создания уникального визуального стиля приложения. Они позволяют выделить бренд и улучшить пользовательский опыт. В мобильных приложениях кастомные шрифты используются для заголовков, логотипов, акцентных элементов и фирменного стиля.
Variable Fonts — современная технология шрифтов, где один файл содержит множество начертаний: от тонкого до сверхжирного, от узкого до широкого. Это сокращает размер приложения, заменяя несколько файлов шрифта одним. На iOS Variable Fonts поддерживаются через UIFont с параметром weight. На Android — через Typeface.Builder с указанием осей вариативности wght, wdth, slnt. Использование Variable Fonts упрощает типографику в мобильных приложениях: разработчику не нужно загружать отдельные файлы для каждого начертания.
let customFont = UIFont(name: "CustomFont-Regular", size: 16)
let scaledFont = UIFontMetrics.default
.scaledFont(for: customFont)
label.font = scaledFont
label.adjustsFontForContentSizeCategory(true)
NSTextAttachment на iOS позволяет встраивать UIImage внутрь NSAttributedString — изображение выравнивается по baseline и переносится вместе с текстом. На Android аналогом является ImageSpan внутри SpannableString. Оба подхода полезны для чатов со смайликами, новостных лент с иконками и форм с кастомными чекбоксами. Важно правильно масштабировать изображение под высоту шрифта, чтобы текст и графика выглядели гармонично.
Помимо базового форматирования, текст в мобильных приложениях поддерживает дополнительные визуальные эффекты: тени, обводку, зачёркивание и подчёркивание. Эти инструменты расширяют возможности типографики, но требуют аккуратного применения для сохранения читаемости.
Тень текста на iOS задаётся через NSShadow: offset, blurRadius и color. Обводка — через NSStrokeWidthAttributeName: отрицательные значения создают заливку с обводкой, положительные — только контур. Зачёркивание — NSUnderlineStyle (.single, .thick, .double). На Android тень TextView настраивается через android:shadowRadius, android:shadowDx, android:shadowDy. SpannableString поддерживает StrikethroughSpan и UnderlineSpan. Обводка текста на Android реализуется через OutlineSpan или кастомный шрифт.
Эллипсис — обрезка текста с многоточием при переполнении контейнера. На iOS настраивается через lineBreakMode .byTruncatingTail и numberOfLines. На Android — через android:ellipsize="end" и android:maxLines. Marquee (бегущая строка) — анимация прокрутки текста, доступная на Android через android:ellipsize="marquee". На iOS аналога нет — используется библиотека MarqueeLabel. Эллипсис обязателен для всех однострочных текстов в мобильных приложениях, чтобы избежать обрезания контента.
Dynamic Type — система адаптивного текста в iOS, подстраивающая размер шрифта под настройки Accessibility пользователя. Используйте UIFontMetrics для масштабирования кастомных шрифтов. Dynamic Type обязателен для Accessibility-compliant приложений. На Android аналог — единицы sp и scaledPixels, масштабируемые под системные настройки размера текста.
Часто задаваемые вопросы
NSAttributedString — класс iOS для создания форматированного текста с атрибутами шрифта, цвета и стилей на уровне символов и диапазонов.
SpannableString — класс Android для разметки текста через Span-объекты: ForegroundColorSpan, StyleSpan, URLSpan, UnderlineSpan.
Добавьте файл .ttf в проект, укажите его в Info.plist в ключе Fonts provided by application, затем используйте UIFont(name:).
Поместите .ttf файл в res/font/, создайте XML-семейство шрифтов и укажите android:fontFamily или используйте Typeface.createFromAsset().
Кернинг — расстояние между парами символов. Лигатуры — специальные глифы для сочетаний букв. Управляются через NSKernAttributeName и NSLigatureAttributeName.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.