tabBar 定义了四个页面,其中希望进入 store 页面后自动隐藏tabBar,而展现自定义的底部菜单。使用wx.hideTabBar(),在安卓上表现正常,但是在IOS 上测试出现问题,用了几台iphone来测试都是第一次进入store页面,底部tabBar没有如期隐藏,导致出现双层导航菜单(见图),后退,再此进入user页面才会隐藏。tabBar其他页面本身的switchTab跳转是正常的。store页面也是正常能跳转的。只是进入页面触发 wx.hideTabBar()的问题。 P.S. 无论是使用onload还是onshow来触发wx.hideTabBar(),情况都一样。
已解决,最后在 onReady 触发wx.hideTabBar() 能在IOS 下隐藏tabBar。 但很偶然的情况下还是会有一次半次会出现两层导航菜单(hideTabBar无效,IOS下),作为保障,我做了个二次检测:
onReady 调用
wx.hideTabBar({
fail:function(){
setTimeout(function(){ // 做了个延时重试一次,作为保底。
wx.hideTabBar()
},500)
}
});
然后
onShow 加入调用代码
wx.hideTabBar()
我的理解:
对于IOS系统而言,第一次进入,必须在最后 页面ready的情况下调用hideTabBar()才有效,这样才能隐藏。而在onShow那里也调用,原因是,当小程序在运行生命周期内,假如用户退出了当前这个需要隐藏tabbar的页面C,去了其他tab页面(A/B/D),再回来这个页面C的话,还需要触发hideTabBar的。这时候只有onShow合适。
此坑,与大伙分享,希望能帮到其他人。
另外,IOS以及华为机上,隐藏tabBar都会一闪跳动一下。效果不太理想。反而是被大家嫌弃的vivo x7上没有这个闪动的情况。 wx.hideTabBar() 估计还需要进一步优化性能或逻辑。
感谢黄思程官方小伙伴的回复!