6.1 KiB
6.1 KiB
TDesign TabBar 美化完成
📅 更新时间
2026-01-06
🎨 改进内容
从原生 TabBar 升级到 TDesign TabBar
修改前:
- 使用微信小程序原生
tabBar配置 - 样式固定,无法自定义
- 图标需要准备 PNG 文件
- 仅支持文字标签
修改后:
- ✅ 使用 TDesign
<t-tab-bar>组件 - ✅ 支持 Icon 图标(使用 icon 属性)
- ✅ 更现代的设计风格
- ✅ 与页面内容完美集成
- ✅ 支持更多自定义选项
📦 修改文件
1. app.json
移除原生 TabBar 配置:
// 删除了以下配置
"tabBar": {
"color": "#666666",
"selectedColor": "#0052D9",
"backgroundColor": "#ffffff",
"borderStyle": "black",
"list": [...]
}
添加 TDesign 组件:
"usingComponents": {
"t-tab-bar": "tdesign-miniprogram/tab-bar/tab-bar",
"t-tab-bar-item": "tdesign-miniprogram/tab-bar-item/tab-bar-item"
}
2. pages/index/index.wxml
添加 TDesign TabBar:
<t-tab-bar value="0" theme="normal" bindchange="onTabChange">
<t-tab-bar-item value="0" icon="search" label="价格查询" />
<t-tab-bar-item value="1" icon="chart-line" label="价格趋势" />
</t-tab-bar>
关键属性:
value="0"- 当前激活的 tab 索引(0 = 价格查询页)theme="normal"- 主题样式bindchange="onTabChange"- 切换事件icon="search"- 使用 TDesign 内置图标icon="chart-line"- 图表图标
3. pages/index/index.js
添加切换逻辑:
onTabChange(e) {
const value = e.detail.value
if (value === '0') {
// 当前页,不做处理
return
} else if (value === '1') {
// 跳转到价格趋势页
wx.switchTab({
url: '/pages/trend/trend'
})
}
}
4. pages/trend/trend.wxml
添加 TDesign TabBar:
<t-tab-bar value="1" theme="normal" bindchange="onTabChange">
<t-tab-bar-item value="0" icon="search" label="价格查询" />
<t-tab-bar-item value="1" icon="chart-line" label="价格趋势" />
</t-tab-bar>
关键属性:
value="1"- 当前激活的 tab 索引(1 = 价格趋势页)
5. pages/trend/trend.js
添加切换逻辑:
onTabChange(e) {
const value = e.detail.value
if (value === '1') {
// 当前页,不做处理
return
} else if (value === '0') {
// 跳转到价格查询页
wx.switchTab({
url: '/pages/index/index'
})
}
}
6. 样式调整
.container {
padding-bottom: 120rpx; /* 留出 TabBar 空间 */
}
.container {
padding-bottom: 120rpx; /* 留出 TabBar 空间 */
}
🎯 TDesign TabBar 特性
1. 内置图标
无需准备图片文件,直接使用 TDesign 内置图标:
| 图标名称 | 用途 | Tab项 |
|---|---|---|
search |
搜索/查询 | 价格查询 |
chart-line |
折线图/趋势 | 价格趋势 |
home |
首页 | - |
user |
用户中心 | - |
settings |
设置 | - |
cart |
购物车 | - |
更多图标: TDesign Icons
2. 主题样式
theme 属性可选值:
normal- 默认主题(推荐)tag- 标签样式
3. 自定义选项
TabBar 属性:
value(String/Number) - 当前激活的 tabtheme(String) - 主题样式split(Boolean) - 是否显示分割线bindchange- 切换事件
TabBar Item 属性:
value- tab 的唯一标识icon- 图标名称label- 文本标签badgeProps- 徽标属性
📊 TabBar 对比
| 特性 | 原生 TabBar | TDesign TabBar |
|---|---|---|
| 图标支持 | 需要 PNG 文件 | 内置 icon 名称 |
| 自定义样式 | 有限 | 完全可定制 |
| 位置固定 | 底部固定 | 可任意放置 |
| 集成方式 | app.json 配置 | 页面组件 |
| 动画效果 | 系统默认 | TDesign 动画 |
| 徽标支持 | ❌ | ✅ |
| 分割线 | ❌ | ✅ |
🔧 工作原理
页面切换流程
用户点击 TabBar
↓
触发 bindchange 事件
↓
获取 e.detail.value (0 或 1)
↓
判断是否为当前页
↓
否 → 使用 wx.switchTab() 跳转
是 → 不做处理
状态管理
价格查询页 (index):
- TabBar
value="0"(激活状态) - 点击"价格趋势"(value=1) → 跳转到 trend 页
价格趋势页 (trend):
- TabBar
value="1"(激活状态) - 点击"价格查询"(value=0) → 跳转到 index 页
为什么使用 wx.switchTab()?
因为使用了 TabBar(虽然是组件形式),所以页面关系类似于 TabBar 页面,需要使用 wx.switchTab() 而非 wx.navigateTo() 或 wx.redirectTo()。
✅ 完成效果
视觉效果
- ✅ 底部固定显示 TabBar
- ✅ 当前页图标高亮显示
- ✅ 点击切换有平滑动画
- ✅ TDesign 蓝色主题(#0052D9)
- ✅ 图标 + 文字标签布局
交互体验
- ✅ 点击即时响应
- ✅ 页面切换流畅
- ✅ 内容不被 TabBar 遮挡(padding-bottom: 120rpx)
- ✅ 返回键正常工作
设计统一
- ✅ 与 TDesign 其他组件风格一致
- ✅ 图标与功能语义匹配
- ✅ 符合微信小程序设计规范
📝 注意事项
-
图标大小
- TDesign TabBar 图标大小固定,无法调整
- 如需自定义大小,使用图片而非 icon 属性
-
页面切换
- 必须使用
wx.switchTab() - 不能使用
wx.navigateTo()或wx.redirectTo()
- 必须使用
-
底部留白
- 必须设置
padding-bottom: 120rpx - 避免内容被 TabBar 遮挡
- 必须设置
-
value 类型
- 可以是数字
0、1 - 也可以是字符串
'index'、'trend' - 两个页面要对应一致
- 可以是数字
🎉 总结
成功将原生 TabBar 升级为 TDesign TabBar,实现:
- ✅ 更现代的设计风格
- ✅ 无需准备图标图片
- ✅ 更灵活的自定义选项
- ✅ 完美的组件集成
- ✅ 流畅的用户体验
状态: ✅ 已完成,可以正常使用
完成时间: 2026-01-06 改进效果: 底部导航栏更美观,交互更流畅