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

Цветовая схема

Для светлой и тёмной тем используйте либо два отдельных объекта ChatColors в theme и darkTheme, либо один ChatColors с динамическими UIColor — через UIColor { traitCollection in ... } или extension SDK UIColor.colorFor(light:dark:).


Сводная таблица свойств

У всех свойств есть значения по умолчанию — переопределяйте только нужные.

СвойствоLight (по умолчанию)Dark (по умолчанию)Где используется
main #191E23 #E1E1EAОсновной текст сообщений, время сообщения, имена операторов, текст системных сообщений; цвет автора и текста цитаты в исходящих сообщениях
secondary #777B7E #B0B0BAДата-разделитель в ленте сообщений, подзаголовок плейсхолдера пустого чата, текст в панели цитаты над полем ввода, URL в превью ссылок
disabled #9FA5A9 #8A8A8EDisabled-состояния кнопок и быстрых ответов, граница поля ввода, текст удалённого сообщения и сообщения о нерабочем времени
background #F1F1F7 #1C1C1EФон экранов чата и поиска; базовый фон стилей компонентов (большинство видимых элементов переопределяет его на backgroundWhite)
backgroundWhite #FFFFFF #2C2C2FПузыри сообщений (входящих и исходящих по умолчанию), фон превью ссылок (OpenGraph), цвет спиннера и подписи в оверлее загрузки чата
link #007AFF #007AFFСсылки в тексте, курсор в поле ввода, кнопки навигационной панели («Назад», «Закрыть», поиск), разделитель цитаты, индикатор загрузки, прогресс-бар, кнопки быстрых ответов
linkLight #4EAAFF #4EAAFFФон цитаты, tint поля ввода, нажатое состояние акцентных кнопок (в т.ч. быстрых ответов)
positive #09A460 #09A460Иконки статусов сообщений (отправлено / доставлено / прочитано), активная кнопка «да» в опросах да/нет, pull-to-refresh, фон тостов, иконка кнопки прокрутки к непрочитанным
warning #FFC043 #FFC043Иконки рейтинговых опросов, цвет автора и текста цитаты во входящих сообщениях (ChatFlow.incomeMessages.quoteStyle)
error #AF1400 #E11900Цвет статус-индикатора и времени при ошибке отправки, цвет пузыря сообщения с ошибкой
errorLight #E11900 #FF594CЦвет текста ошибки отправки, фон кнопки прокрутки к непрочитанным
Поведение при отсутствии darkTheme

Если chatCenterSDK.darkTheme не задан, светлая палитра применяется и в системно тёмной теме.

Требования к контрастности (WCAG AA) и проверка кастомных цветов — см. Доступность.


Способы инициализации

Прямое присваивание свойств:

let colors = ChatColors()
colors.main = .black
colors.background = .systemBackground
colors.link = .systemBlue

Фабричный метод build — возвращает настроенный экземпляр:

let colors = ChatColors.build { colors in
colors.main = .black
colors.background = .systemBackground
colors.link = .systemBlue
}

Метод apply (из протокола Applicable) — мутирует существующий экземпляр и поддерживает цепочку вызовов:

let colors = ChatColors().apply { colors in
colors.main = .black
colors.link = .systemBlue
}

Полный пример настройки палитры — в демо MainViewController+Full.swift, метод makeFullTheme(), блок // MARK: - ChatColors - полная палитра.


Светлая и тёмная темы

chatCenterSDK.theme принимает ChatTheme для светлой темы, chatCenterSDK.darkTheme — для тёмной.

let lightColors = ChatColors()
lightColors.main = .black
lightColors.background = .white
// fallback на системный цвет, если asset не найден
lightColors.link = UIColor(named: "BrandBlue") ?? .systemBlue

let darkColors = ChatColors()
darkColors.main = .white
darkColors.background = UIColor(named: "BackgroundDark") ?? .black
darkColors.link = UIColor(named: "BrandBlueDark") ?? .systemBlue

chatCenterSDK.theme = ChatTheme(colors: lightColors)
chatCenterSDK.darkTheme = ChatTheme(colors: darkColors)
Порядок присвоения важен

Присвоение chatCenterSDK.theme автоматически перезаписывает chatCenterSDK.darkTheme тем же объектом. Если присвоить darkTheme до theme, тёмная тема будет потеряна. Всегда задавайте darkTheme после theme.

ChatTheme(colors:) — короткая форма; полная сигнатура — ChatTheme(colors:images:typography:), все параметры с дефолтами. Стили компонентов копируют цвета в момент создания: часть из них (inputViewStyle, addFileMenuStyle) создаётся сразу при ChatTheme.init, остальные — лениво при первом доступе. После открытия чата правки ChatColors уже не применятся — пересоздайте ChatTheme и присвойте chatCenterSDK.theme / darkTheme заново.

Одна палитра на обе темы

Если цветовая схема отличается только оттенками, используйте один ChatColors с динамическими UIColor:

let adaptiveLink = UIColor { traitCollection in
traitCollection.userInterfaceStyle == .dark
? UIColor(red: 0.31, green: 0.67, blue: 1.0, alpha: 1)
: UIColor(red: 0.0, green: 0.48, blue: 1.0, alpha: 1)
}

let colors = ChatColors()
colors.link = adaptiveLink
chatCenterSDK.theme = ChatTheme(colors: colors)

Ограничения

ЭффектСтатус в SDKАльтернатива
Градиенты (линейный, радиальный)Не поддерживаетсяSolid-цвет — выберите доминирующий оттенок
Drop Shadow (сложные конфигурации)Нет публичного APIДоступен только cornerRadius в стилях
Blur / Frosted GlassНе поддерживаетсяSolid-цвет с нужной прозрачностью
Semi-transparent overlaysЧастичноUIColor(white: 0, alpha: 0.4)
Дополнительные акцентные цвета (помимо link/linkLight)Нет прямого токенаНастраиваются точечно через стили компонентов

Связанные разделы