Jay丶千珏
Jay丶千珏
  • 发布:2020-07-28 15:29
  • 更新:2024-04-16 15:52
  • 阅读:6087

有关自定义底部导航栏 / 自定义tabbar的一些经验

分类:uni-app

在开发的过程中,我们经常会遇到一些设计的很好看的底部导航栏,最常见的比如下面这种的


中间会有凸起的一部分,这个时候我们再次使用常规的做法显然已经不再合适了,在pages.json中如何配置都无法达到我们的这个需求,这个时候我们需要自定义底部导航栏,那么究竟该如何自定义呢,我看了众多的博客插件,他们的做法基本上如初一辙,写上一个自定义的导航栏,然后通过索引值判断去不断的用v-if去进行组件的切换,虽然也能实现,但是此做法存在较为严重的性能问题,我下面提供的这个做法,大家可以一试!
1.我们依然在pages.json中去配置底部导航栏,只是我们只用去配置pagePath即可,如下

"tabBar": {  
        "list": [{  
                "pagePath": "pages/tabbar/index/index" // 页面文件路径  
            },  
            {  
                "pagePath": "pages/tabbar/user/user" // 页面文件路径  
            }  
        ]  
    }

2.上方配置完成后,我们可以在app.vue 中的onLaunch周期中,写入 uni.hideTabBar() ,此作用是隐藏底部导航,特别注意,因为此api不兼容字节跳动的小程序,所以,想要在字节跳动小程序内使用需要写入tt.hideTabBar()

  1. 然后我们就可以去写上一个底部导航栏的组件,这个就是一个组件,我想大家应该都会写的,下面是我项目中写的一份


4.把此组件引入在底部导航栏的页面就可以了,这样就能较为完美的解决底部导航栏这一问题,有兴趣的开发者可以一试,至少本人写自定义导航栏一直都是这么写的,嘿嘿
当然,我依然还是推荐原生的写法,不要整那么多花里胡哨的,除了好看,一无是处,只要是自定义底部导航栏总会有那么几个性能的问题,所以建议还是要给经理,客户,老板提提建议,这样我们开发人员也能省点劲

翻看大厂的微信小程序都是原生配置的底部导航栏,为什么老板总觉得不好看,我觉得还可以啊0.0,脑壳疼

5 关注 分享
a***@qq.com guosp 老冰棍 勾栏听曲 1***@163.com

要回复文章请先登录注册

1***@qq.com

1***@qq.com

现在uniapp只要能解决midButton的文字高亮问题其他就和原生一致了
2024-04-16 15:52
c***@163.com

c***@163.com

我关心的是:hideTabBar() 会不会闪一下消失?如果会闪,也有点尴尬
2022-11-11 11:44
狂人的芝士

狂人的芝士

回复 Jay丶千珏 :
原来是这样,懂了,谢谢老哥~
2021-07-12 20:03
Jay丶千珏

Jay丶千珏 (作者)

回复 狂人的芝士 :
正常的app也好,小程序也好,用原生的导航栏,当你在任何一个tabbar页面,点击手机的物理返回键,就是要退出app或小程序的,你自定义用navigateTo跳转,那岂不是,我从tab1跳转tab2,点击手机返回,我又返回到tab1了,这个显然不是我们想要的啊,我们想要的就是和原生一样的,尽量去保持一致
2021-07-12 10:12
狂人的芝士

狂人的芝士

回复 Jay丶千珏 :
谢谢回复,其他问题我都明白了,只闪烁一下也是因为页面有缓存,但就我的回复中的第一个问题可以请你回答下吗:为什么不直接把tabbar的list的配置项置空,然后通过navigateTo切换tab页面,而是要配置tabbar的list,然后通过switchTab切换tab页面呢?
2021-07-10 17:24
Jay丶千珏

Jay丶千珏 (作者)

回复 狂人的芝士 :
对,uview的自定义底部导航栏是听了我的建议改成这样的,其实这只是一种自定义导航栏的其中一种思路,大部分的自定义导航栏,都是你自己在一个页面写一个导航栏组件,底部导航页面的切换,其实就是几个组件之间的切换,每次都需要去重新渲染组件之类的,,,,,用我说的方式写的话,还是相当于,底部导航是几个页面,只是原生自带的底部导航先给隐藏掉,用一个自定义导航放上去,跳转方式依然用的uni.switch的方式,只用tabbar页面加载一次和原生的保持一致,目前的缺点就是第一次加载的时候会闪烁一下,这个也没什么好的办法,说白了,就是我提供的方法几个tabbar页面用同一个导航组件,另外一种是一个页面,几个tabbar组件+一个底部导航组件
2021-07-07 09:24
狂人的芝士

狂人的芝士

老哥,为何不直接配置tabbar为空呢?配置然后又隐藏是要照顾什么bug吗?
我看了uview的自定义tabbar,他们也是你这么个搞法:https://www.uviewui.com/components/tabbar.html
然后我还想问一下这种方法的话,每次切换页面是不是tabbar都会跟着闪烁一下?因为实际上是几个长的一样的tabbar在互相切换。
而且我下载uview的tabbar模板,运行后也点击tabbar的图标也确实会闪烁,只不过只会在每个tabbar的图标第一次被点击时发生,之后就再也不会了,这又是什么原理,我都懵了。。。
2021-06-26 23:36
Jay丶千珏

Jay丶千珏 (作者)

回复 1***@qq.com :
不会的,我开发好多的微信小程序,都是这么个流程,没有什么问题的
2021-06-16 17:43
1***@qq.com

1***@qq.com

微信小程序上这么实现,在首次加载小程序时,会有原生空白tab出现,闪烁一下才隐藏了
2021-06-14 16:54
IF77

IF77

回复 John_Williams :
遇到了 您解决了吗
2020-11-13 17:13