例如标题 针对 微信小程序 tabs 遇到的问题
对于官方自定义tab 和手搓 自定义tab 给出我自己的经历
当你的UI或者你的奇思妙想拦不住的时候
官方提供的永远是最简单的
一丶官方样式太简单 不利于UI拓展
微信官方限制 tab栏仅需要提供名字和图标时 便极大的限制了开发
但官方也放开了自定义tab栏 性能会有欠佳
但是相对自己手写的tab栏 无论是切换体验 还是灵活度 官方的无疑最佳
下面是针对UI设计调整的自定义tab栏
无论是uni-app 还是微信原生 都需要这样的结构
代码内容请去查看官方demo 在官方demo中调整
在搭好组件结构后 需要在配置中添加tab相关设置
在uni-app中 配置 pages.json 原生微信在app.json中配置
也可以去官网直接看文档
官方提供的自定义组件 大于两个tab时 去赋值会有赋值延迟 页面正确但选中样式会停留在上一步
所以自定义很坑 uni-app官方没给自定义tabbar怎么处理
不适用所以也没深入研究 有人可以解决这问题的话 请联系我 我把这文章补充了
二丶单页面多应用
在服务级别小程序中 一定会遇到不同的角色拥有不同的tab和不同的样式 例如 以下:
一般遇到这样的问题 都会采用自己手写tab组件 针对登录的角色 调整tab栏
公司需求为针对角色有9个tab栏 故官方的自定义不支持 最多五个 而且还不能随时更换
开发这种类型的tab 得注意细节
一定得知道 wx.navigateTo 和 wx.relaunch 的区别
wx.navigateTo 缓存当前路由 保持在路由栈中
wx.relaunch 清空所有路由栈 打开新的页面
知道他们的区别 会提升操作体验
relaunch 切换会显示右滑动作 并且伴随屏幕闪烁
navigateTo 不会有切换动作 闪烁正常
单navigateTo是存在路由栈中的 微信路由栈只能缓存十条 最底部的会被清理掉 超出路由栈则不会跳转
我对于tab栏 使用了 navigateTo 并且每次跳转会查询当前路由栈数量
当路由栈数量大于6时 使用 relaunch 则重新开启页面
getCurrentPages 方法可以获取当前路由栈
但这种优化得体验并没有原生的好,也希望官方尽早兼容一下 (听过这个问题 19年就有人在社区提了 都2202年了)
三丶 联想式开发
以下皆为想法:
既然涉及到多tab就不好用了 其实自定义也可以这样玩
开发单页面单应用 涉及tab页面的就作为组件展示内容 不涉及tab页面的就跳转
但这单页面体积会很大 只适合小型业务
下次还有机会就实现实现 这座屎山我是翻不动了
注:禁止直接搬运 请在有深入研究后借鉴