Перейти к основному содержимому
Версия: 5.8.2

Типографика

Класс ChatTypography предоставляет набор предопределённых стилей шрифтов, используемых в интерфейсе чата. Все стили основаны на системном шрифте iOS и оптимизированы под удобство чтения и единый визуальный стиль.

Описание

ChatTypography — это базовый класс, предоставляющий унифицированный доступ к различным стилям текста, таким как заголовки, подзаголовки, основной текст, подписи и другие. Использует .systemFont с заданными размерами и весами для обеспечения консистентности по всему приложению.

Все стили шрифтов можно легко переопределить или расширить для поддержки кастомных шрифтов и тем.

Какой токен отвечает за что
ТокенГде используется в UI
largeTitleКрупные заголовки (H1 в Figma)
heading1 / heading2Заголовки секций
titleЗаголовок навигационной панели
subtitleПодзаголовок в навигационной панели
bodyОсновной текст, описания
messageТекст в пузырях сообщений чата
boldВыделенный текст, имена авторов
captionВремя отправки, метаданные
caption2Мелкие подписи (дата, разделители)
footnoteПримечания, статусы

Доступные стили шрифтов

Заголовки

ПеременнаяРазмерВесНазначение
title17RegularОбычный заголовок
largeTitle28SemiboldКрупный заголовок (например, навигация)

Подзаголовки

ПеременнаяРазмерВесНазначение
subtitle16RegularПодзаголовок

Заголовки секций

ПеременнаяРазмерВесНазначение
heading117SemiboldЗаголовок уровня 1
heading216SemiboldЗаголовок уровня 2

Основной текст

ПеременнаяРазмерВесНазначение
body15RegularОсновной текст
bold15SemiboldВыделенный текст
message14RegularСообщения в чате

Подписи и мелкий текст

ПеременнаяРазмерВесНазначение
caption12MediumПодпись, метаданные
caption210RegularМелкая подпись (например, дата)

Вспомогательные элементы

ПеременнаяРазмерВесНазначение
footnote13SemiboldПримечания, футноты

Соответствие Figma и SDK

Шкала типографики Foundation

На странице Foundation → Typography в Figma используются свои названия текстовых стилей. Ниже приведено соответствие между Figma и токенами ChatTypography:

Стиль в FigmaТокен SDKРазмерВесПримечание
H1largeTitle28SemiboldКрупный заголовок
H2heading117SemiboldЗаголовок секции
H3heading216SemiboldПодзаголовок секции
Subtitle 1subtitle16RegularПодзаголовок
Subtitle 2title17RegularОбычный заголовок
Bodybody15RegularОсновной текст
Boldbold15SemiboldВыделенный текст
Captioncaption12MediumПодпись
Footnotefootnote13SemiboldПримечания
примечание

Токен 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)
warning

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)
}