Skip to main content
Version: Next

Стили

Настройка внешнего вида элементов на экране осуществляется через настройку соответствующего этому элементу стиля.

Класс стиляОписание
Базовые элементы интерфейса
NavigationBarStyleСтиль навигационной панели в чате
ChatLoadingStyleОбщий стиль экрана загрузки чата
ChatPlaceholderStyleСтиль пустого состояния чата (например, нет сообщений)
ChatPlaceholderErrorStyleСтиль отображения ошибки (например, не удалось загрузить чат)
LoadingIndicatorStyleСтиль индикатора загрузки (в сообщениях, действиях)
ChatInputStyleСтиль панели ввода сообщений в чате
ChatInputTextStyleСтиль контейнера ввода текста
ChatInputVoiceStyleСтиль элемента записи голосовых сообщений
ChatInputQuoteStyleСтиль элемента отображения цитаты над полем ввода
SearchBarStyleСтиль поисковой строки в панели навигации
ToastAlertStyleСтиль всплывающих уведомлений (toast)
ScrollToMessageButtonStyleКнопка прокрутки к новым сообщениям
PhotoPickerStyleСтиль выбора фото (галерея/камера)
ProgressViewStyleСтиль индикатора прогресса (загрузка файлов и т.п.)
FileViewerStyleСтиль отображения файлов (PDF, документы)
ButtonStyleБазовый стиль кнопки в чате
TextButtonStyleТекстовая кнопка (без фона)
IconButtonStyleКнопка с иконкой
AudioPlayerStyleСтиль аудиоплеера (в чате или отдельно)
Стили сообщений
ChatMessagesStylesКонтейнер стилей для всех типов пользовательских сообщений
ChatMessageStyleБазовый стиль сообщения в чате
TextChatMessageStyleСтиль текстового сообщения
FileChatMessageStyleСтиль сообщения с файлом
SearchChatMessageStyleСтиль выделения при поиске в сообщениях
ImageChatMessageStyleСтиль изображения в сообщении
AudioChatMessageStyleСтиль аудиосообщения
SurveyChatMessageStyleСтиль опроса/голосования в сообщении
ScheduleChatMessageStyleСтиль сообщения с расписанием/напоминанием
OperatorJoinedChatMessageStyleСтиль сообщения о подключении оператора
QuickReplyStyleСтиль быстрых ответов
QuoteStyleСтиль отображения цитирования сообщений
OpenGraphViewStyleСтиль отображения OpenGraph в текстовых сообщениях

У каждого компонента есть общие базовые параметры, описанные в ChatMessageStyle например:

    /// Округление углов у элемента (если применимо к элементу, иначе игнорируется)
public var cornerRadius: CGFloat
/// Цвет фона элемента
public var backgroundColor: UIColor
/// Цвет элемента (если применимо к элементу, иначе игнорируется)
public var tintColor: UIColor

Так и уникальные для каждого компонента. Полный список можно посмотреть в документации по API

Стиль можно создать с помощью базового конструктора:

	let outcomeMessages = ChatMessagesStyles(components: components)
outcomeMessages.textMessageStyle.textStyle.color = .black
outcomeMessages.showAvatar = showOutcomeAvatar
outcomeMessages.bubbleErrorColor = .red

или с помощью билдера с замыканием для настройки параметров:

	let outcomeMessages = ChatMessagesStyles.build(with: components) { messagesStyle in
messagesStyle.textMessageStyle.textStyle.color = .black
messagesStyle.showAvatar = showOutcomeAvatar
messagesStyle.bubbleErrorColor = .red
}

Настройка уже существующего стиля осуществляется через свойства:

    // Получение настроек экрана поиска
let searchFlow = theme.flows.searchFlow
searchFlow.navigationBarStyle.hidden = false
searchFlow.navigationBarStyle.searchBarStyle.cancelButtonStyle.tintColor = .white
searchFlow.searchMessageStyle.matchTextStyle.color = .red
searchFlow.notFoundTextStyle = ChatTextStyle(font: typography.message, color: .white)

или с помощью метода apply, с настройкой через замыкание:

    // Применение настроек для экрана поиска
theme.flows.searchFlow.apply {
$0.navigationBarStyle = NavigationBarStyle.build(with: components, configure: {
$0.hidden = false
$0.backButtonColor = .red
})
$0.searchMessageStyle.apply {
$0.matchTextStyle = .init(font: UIFont.systemFont(ofSize: 20), color: .systemGreen)
$0.nextImage = ChatImage(system: "chevron.forward", tintColor: .systemGreen)
}
$0.navigationBarStyle.searchBarStyle.cancelButtonStyle.tintColor = .red
$0.notFoundTextStyle = ChatTextStyle(font: typography.message, color: .red)
}
note

В текущей версии есть ограничение на настройку компонентов (переиспользуемых из ChatComponents) через apply. Их настройка в одном из флоу через apply, может приводить к их глобальному изменению в теме. В этом случае рекомендуется точечно создавать новый компонент и настраивать его в нужном месте флоу.

note

В этой версии дизайн система применялась к текущему чату, могли быть учтены не все параметры. В случае обнаружения проблем с настройкой, обратитесь в поддержку.