主题定制
从 5.30.0 版本开始,IMKit 支持主题定制功能,提供传统主题和欢快主题两种内置主题,同时支持自定义主题。
功能概述
IMKit 的主题定制功能提供了灵活的主题配置能力,包括:
- 内置主题:传统主题(Traditional)和欢快主题(Lively)
- 自定义主题:支持基于内置主题进行颜色和图片的自定义
- 深色模式:iOS 13+ 自动适配系统深色模式
- 动态切换:运行时无缝切换主题,无需重启应用
效果预览
| 传统主题-浅色 | 传统主题-深色 | 欢快主题-浅色 | 欢快主题-深色 |
|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
主题资源
在 RongIMKit.framework 组件文件夹下可以看到所支持的内置主题资源 RongCloudLively.bundle 和 RongCloud.bundle。RongCloudLively.bundle 为欢快主题资源包,RongCloud.bundle 为传统主题资源包。
选中 RongCloudLively.bundle并右键选择 Show Package Contents 即可看到内置的两套主题资源,文件夹名称即为主题类别。
我们以 “欢快主题” 为例,light 文件夹下包含 theme.plist 文件和 resources 资源文件夹。
theme.plist 文件存储了当前主题所使用的图片、颜色等要素的值,深色和浅色主题下的 theme.plist 文件中的 colors key 均相同;
resources 资源文件夹存储了当前主题所使用的资源,例如图片。
新增主题需要基于内置主题实现,用户需提供包含 theme.plist 文件和 resources 资源文件夹的 bundle,其中 theme.plist 的 key 按需添加,缺失的 key,SDK 会从内置主题浅色资源中获取对应资源替换。
快速开始
使用内置主题
IMKit SDK 默认使用传统主题,您可以通过以下方式切换主题:
#import <RongIMKit/RongIMKit.h>
// 切换到传统主题
[RCIMKitThemeManager changeInnerTheme:RCIMKitInnerThemesTypeTradition];
// 切换到欢快主题
[RCIMKitThemeManager changeInnerTheme:RCIMKitInnerThemesTypeLively];
主题系统架构
核心类说明
RCIMKitThemeManager
主题管理器,负责主题的切换和资源获取。
主要方法:
| 方法 | 说明 |
|---|---|
changeInnerTheme: | 切换内置主题 |
changeCustomTheme:baseOnTheme: | 应用自定义主题 |
currentInnerThemesType | 获取当前内置主题类型 |
dynamicColor:lightColor:darkColor: | 获取动态颜色 |
dynamicImage:defaultImageName: | 获取动态图片 |
addThemeDelegate: | 添加主题变更监听 |
removeThemeDelegate: | 移除主题变更监听 |
RCIMKitTheme
自定义主题类,用于加载和管理自定义主题资源。
主要属性:
| 属性 | 类型 | 说明 |
|---|---|---|
name | NSString | 主题名称 |
colors | NSDictionary | 颜色配置字典 |
images | NSDictionary | 图片配置字典 |
resourcePath | NSString | 资源文件夹路径 |
plistPath | NSString | 配置文件路径 |
RCIMKitInnerThemesType
内置主题类型枚举。
typedef NS_ENUM(NSInteger, RCIMKitInnerThemesType) {
RCIMKitInnerThemesTypeTradition, // 传统主题
RCIMKitInnerThemesTypeLively // 欢快主题
};
主题切换
使用内置主题
IMKit 提供两种内置主题:传统主题(Traditional)和欢快主题(Lively)。
切换到传统主题
#import <RongIMKit/RongIMKit.h>
// 切换到传统主题
[RCIMKitThemeManager changeInnerTheme:RCIMKitInnerThemesTypeTradition];
切换到欢快主题
// 切换到欢快主题
[RCIMKitThemeManager changeInnerTheme:RCIMKitInnerThemesTypeLively];
获取当前主题
// 获取当前内置主题类型
RCIMKitInnerThemesType currentType = [RCIMKitThemeManager currentInnerThemesType];
if (currentType == RCIMKitInnerThemesTypeTradition) {
NSLog(@"当前使用传统主题");
} else {
NSLog(@"当前使用欢快主题");
}
主题变更监听
实现 RCIMKitThemeDelegate 协议来监听主题变更:
#import <RongIMKit/RongIMKit.h>
@interface YourViewController () <RCIMKitThemeDelegate>
@end
@implementation YourViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 添加主题变更监听
[RCIMKitThemeManager addThemeDelegate:self];
}
- (void)dealloc {
// 移除主题变更监听
[RCIMKitThemeManager removeThemeDelegate:self];
}
#pragma mark - RCIMKitThemeDelegate
/// 主题变更回调
/// @param customTheme 自定义主题对象(未设置时为 nil)
/// @param type 内置主题类型
- (void)themeDidChanged:(RCIMKitTheme *)customTheme
baseOnTheme:(RCIMKitInnerThemesType)type {
NSLog(@"主题已变更:%@", type == RCIMKitInnerThemesTypeTradition ? @"传统主题" : @"欢快主题");
// 更新自定义 UI
[self updateUIForNewTheme];
}
- (void)updateUIForNewTheme {
// 刷新界面
[self.tableView reloadData];
// 更新导航栏
[self updateNavigationBar];
// 更新其他 UI 组件
// ...
}
@end
深色模式支持
IMKit 会自动适配 iOS 13+ 的系统深色模式,无需额外配置。
- iOS 13+:完整支持深色模式
- iOS 13 以下:仅支持浅色模式
自定义主题
创建自定义主题
步骤 1:准备主题资源
创建主题文件夹,包含配 置文件和资源文件:
MyCustomTheme/
├── theme.plist # 主题配置文件
└── resources/ # 资源文件夹
├── icon_add@2x.png
├── icon_add@3x.png
├── icon_emoji@2x.png
├── icon_emoji@3x.png
└── ... # 其他图片资源



