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

Стили

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

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

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

    /// Стиль текста сообщения
public lazy var textStyle: ChatTextStyle
/// Стиль отображения времени сообщения
public lazy var timeTextStyle: ChatTextStyle

/// Иконка статуса отредактированного сообщения
public lazy var editedStatusImage: ChatImage
/// Иконка статуса отправляемого сообщения
public lazy var pendingStatusImage: ChatImage
/// Иконка статуса отправленного сообщения
public lazy var deliveredStatusImage: ChatImage
/// Иконка статуса прочитанного сообщения
public lazy var readStatusImage: ChatImage

/// Стиль отображения текста ошибки
public lazy var errorTextStyle: ChatTextStyle
/// Иконка i у сообщения с ошибкой
public lazy var errorInfoButton: IconButtonStyle

/// Цвет статуса при ошибке
public lazy var errorStatusColor: UIColor = colors.error
/// Стиль текста даты при ошибке
public lazy var errorTimeTextStyle: ChatTextStyle

/// Отступ от края бабла сообщения до конца экрана
public var messageBubbleEndMargin: CGFloat

/// Отступ от контейнера для исходящих сообщений
public var containerRightOffset: CGFloat
/// Остступ от контейнера для входящих сообщений
public var containerLeftOffset: CGFloat

Также у каждого компонента есть уникальные параметры. Полный список можно посмотреть в документации по 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)
}
примечание

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

примечание

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