[uni-app]在uni-app开发的微信小程序中使用自定义tabBar
在 uni-app 中使用自定义 tabBar,需要注意的一共有 3 点:app.json
的配置、custom-tab-bar
目录的建立、tab 页中getTabBar
方法的调用。
首先根据官方文档,配置app.json
。在 uni-app 项目中,app.json
对应的是pages.json
,每个页面的.json
文件,需要写在pages.json
的pages-style
段中:
{
"tabBar": {
"custom": true,
"color": "#000000",
"selectedColor": "#000000",
"backgroundColor": "#000000",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页"
},
{
"pagePath": "pages/me/index",
"text": "我的"
}
]
},
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"usingComponents": {}
}
},
{
"path": "pages/me/index",
"style": {
"navigationBarTitleText": "我的",
"usingComponents": {}
}
}
],
......
}
然后需要在根目录下新建custom-tab-bar
目录,在这个目录中手动新建小程序四件套,即index.wxml
、index.js
、index.wxss
、index.json
。这个文件夹会被原封不动地复制到编译好的项目中。接着就是编写 tabBar 的样式和逻辑,这和原生开发是一样的,这里不再赘述。
最后需要在 tab 页面中调用getTabBar
方法。uni-app 的页面是.vue
文件。在onShow
事件中,添加如下代码:
onShow() {
this.$mp.page.getTabBar().setData({
selectdIndex: 1
});
}
注意,getTabBar
方法并不是直接在this
上,而是在this.$mp.page
上。
还有一点需要注意的是,tabBar 会占用一部分页面高度,tab 页最下方的内容会被遮住,需要处理一下这个问题,比如给 tab 页增加一个与 tabBar 高度一样的padding-bottom
。