Типографика
Класс ChatTypography предоставляет набор предопределённых стилей шрифтов, используемых в интерфейсе чата. Все стили основаны на системном шрифте iOS и оптимизированы под удобство чтения и единый визуальный стиль.
Описание
ChatTypography — это базовый класс, предоставляющий унифицированный доступ к различным стилям текста, таким как заголовки, подзаголовки, основной текст, подписи и другие. Использует .systemFont с заданными размерами и весами для обеспечения консистентности по всему приложению.
Все стили шрифтов можно легко переопределить или расширить для поддержки кастомных шрифтов и тем.
| Токен | Где используется в UI |
|---|---|
largeTitle | Крупные заголовки (H1 в Figma) |
heading1 / heading2 | Заголовки секций |
title | Заголовок навигационной панели |
subtitle | Подзаголовок в навигационной панели |
body | Основной текст, описания |
message | Текст в пузырях сообщений чата |
bold | Выделенный текст, имена авторов |
caption | Время отправки, метаданные |
caption2 | Мелкие подписи (дата, разделители) |
footnote | Примечания, статусы |
Доступные стили шрифтов
Заголовки
| Переменная | Размер | Вес | Назначение |
|---|---|---|---|
title | 17 | Regular | Обычный заголовок |
largeTitle | 28 | Semibold | Крупный заголовок (например, навигация) |
Подзаголовки
| Переменная | Размер | Вес | Назначение |
|---|---|---|---|
subtitle | 16 | Regular | Подзаголовок |
Заголовки секций
| Переменная | Размер | Вес | Назначение |
|---|---|---|---|
heading1 | 17 | Semibold | Заголовок уровня 1 |
heading2 | 16 | Semibold | Заголовок уровня 2 |
Основной текст
| Переменная | Размер | Вес | Назначение |
|---|---|---|---|
body | 15 | Regular | Основной текст |
bold | 15 | Semibold | Выделенный текст |
message | 14 | Regular | Сообщения в чате |
Подписи и мелкий текст
| Переменная | Размер | Вес | Назначение |
|---|---|---|---|
caption | 12 | Medium | Подпись, метаданные |
caption2 | 10 | Regular | Мелкая подпись (например, дата) |
Вспомогательные элементы
| Переменная | Размер | Вес | Назначение |
|---|---|---|---|
footnote | 13 | Semibold | Примечания, футноты |
Соответствие Figma и SDK

На странице Foundation → Typography в Figma используются свои названия текстовых стилей. Ниже приведено соответствие между Figma и токенами ChatTypography:
| Стиль в Figma | Токен SDK | Размер | Вес | Примечание |
|---|---|---|---|---|
| H1 | largeTitle | 28 | Semibold | Крупный заголовок |
| H2 | heading1 | 17 | Semibold | Заголовок секции |
| H3 | heading2 | 16 | Semibold | Подзаголовок секции |
| Subtitle 1 | subtitle | 16 | Regular | Подзаголовок |
| Subtitle 2 | title | 17 | Regular | Обычный заголовок |
| Body | body | 15 | Regular | Основной текст |
| Bold | bold | 15 | Semibold | Выделенный текст |
| Caption | caption | 12 | Medium | Подпись |
| Footnote | footnote | 13 | Semibold | Примечания |
Токен message (14pt Regular) используется SDK для текста в пузырях чата, но не имеет прямого аналога в Figma Foundation — это специфика SDK.
Стили Figma, не имеющие прямого токена в SDK:
| Стиль в Figma | Назначение | Как настроить в SDK |
|---|---|---|
| Callout | Выноска, привлечение внимания | Через стили сообщений (ChatMessageStyle.textStyle) |
| Cite | Цитирование | Через QuoteStyle в стилях |
| List | Списки в тексте | Через ChatMessageStyle.textStyle |
| Url | Ссылки в тексте | Через цвета link / linkLight и стиль сообщений |
| Italic | Курсивный текст | Через UIFont с трейтом .traitItalic |
Использование кастомных шрифтов
Регистрация шрифта в приложении
Чтобы использовать кастомный шрифт (.ttf / .otf) в SDK:
Шаг 1. Добавьте файл шрифта в Xcode-проект (убедитесь, что включена галочка Target Membership).
Шаг 2. Зарегистрируйте шрифт в Info.plist:
<key>UIAppFonts</key>
<array>
<string>YourFont-Regular.ttf</string>
<string>YourFont-Bold.ttf</string>
</array>
Шаг 3. Используйте в SDK с обязательным fallback:
let fonts = ChatTypography()
fonts.message = UIFont(name: "YourFont-Regular", size: 15)
?? .systemFont(ofSize: 15) // fallback обязателен: вернёт nil если шрифт не найден
fonts.bold = UIFont(name: "YourFont-Bold", size: 15)
?? .systemFont(ofSize: 15, weight: .semibold)
UIFont(name:size:) вернёт nil, если PostScript-имя шрифта указано неверно. Проверить точное имя можно через:
UIFont.familyNames.forEach { family in
UIFont.fontNames(forFamilyName: family).forEach { print($0) }
}
Системные шрифты с кастомными параметрами
Если кастомный шрифт не нужен, но хочется изменить размер или вес:
fonts.message = .systemFont(ofSize: 16, weight: .regular)
fonts.bold = .systemFont(ofSize: 16, weight: .bold)
fonts.caption = .monospacedDigitSystemFont(ofSize: 11, weight: .regular) // для временных меток
Пример использования
Актуальный пример можно найти в демо-приложении в MainViewController+Custom.swift.
let fonts = ChatTypography()
fonts.title = .systemFont(ofSize: 12, weight: .medium)
fonts.bold = .systemFont(ofSize: 15, weight: .regular)
fonts.message = .systemFont(ofSize: 15, weight: .regular)
let theme = ChatTheme(typography: fonts)
chatCenterSDK.theme = theme
Альтернативный способ — фабричный метод build:
let fonts = ChatTypography.build { fonts in
fonts.title = .systemFont(ofSize: 12, weight: .medium)
fonts.message = .systemFont(ofSize: 15, weight: .regular)
}