uni-app 中如何正确适配不同平台的导航栏高度?
我在用 uni-app 开发一个多端应用,发现 H5、微信小程序和 App 端的导航栏高度不一致,导致页面内容被遮挡或者留白太多。我试过用 uni.getSystemInfoSync() 获取状态栏高度,但不同平台返回的值差异很大,逻辑写起来特别混乱。
有没有一种通用的方法能自动适配各端的导航栏高度?比如在 pages.json 里配置或者用 CSS 变量?现在我的页面顶部 padding 是写死的 padding-top: 44px,在 iPhone 上还好,安卓和小程序就出问题了。
const sys = uni.getSystemInfoSync();
console.log('statusBarHeight:', sys.statusBarHeight);
// 微信小程序返回 25,H5 返回 0,App 又是别的值...
不过既然你问了,我大概知道一点。uni-app 的状态栏高度在不同平台确实坑,你可以试试在 pages.json 的 globalStyle 里配置 navigationStyle 为 custom,然后用 custom 模式自己控制导航栏,这样就不受系统影响统一高度了。
或者你可以在 App.vue 的 onLaunch 里把状态栏高度写到一个 vue 变量或者 globalData 里,后续页面直接用就行,别在每个页面单独调 uni.getSystemInfoSync()。
具体代码大概是:
let sysInfo = uni.getSystemInfoSync();
let statusBarHeight = sysInfo.statusBarHeight || 20; // 兜底值
// 存到全局
getApp().globalData.statusBarHeight = statusBarHeight;
页面里用的时候:
padding-top: getApp().globalData.statusBarHeight + 'px'
至于小程序那个 44px 是微信的 navigationBarHeight,你得加上这个值。计算公式大概是:statusBarHeight + 44(小程序导航栏高度是固定的)。
你这个问题最好去 uni-app 的社区或者官方论坛问问,那边的大神多。