跳到主要内容

h5低版本浏览器适配

白屏问题

环境:

出现白屏参考上面的方案。

使用的是 Vscode 模板的话,直接参考

使用的是 Hbuilderx 模板的话,在根目录下添加vite.config.js文件

import Uni from '@dcloudio/vite-plugin-uni'
import legacy from '@vitejs/plugin-legacy'
import { defineConfig } from 'vite'

export default defineConfig({
plugins: [
uni(),
legacyPlugin({
// 配置参考上面的 md 文件
})
]
})

原生Tabbar遮挡

如果Uniapp原生的Tabbar会遮挡一部分内容,这是因为部分低版本浏览器可能不支持 env 计算函数,所以导致整个样式设置失效。

解决方案:

新建 /hooks/useSafeAreaBottom 文件夹

在该目录下新建 index.tsindex.css 文件,添加一下内容 index.css

.safe-area-bottom {
padding-bottom: 50px;
padding-bottom: calc(50px + constant(safe-area-inset-bottom));
padding-bottom: calc(50px + env(safe-area-inset-bottom));
}
// 设置为50px是因为Uniapp的tabber的高度固定为50px

index.ts

import './index.css'

export function useSafeAreaBottom(): {
safeAreaInsets: UniApp.GetSystemInfoResult['safeAreaInsets']
needSafeAreaBottom: boolean
} {
const systemInfo = uni.getSystemInfoSync()

const safeAreaInsets: UniApp.GetSystemInfoResult['safeAreaInsets']
= systemInfo.safeAreaInsets ?? {
top: 0,
bottom: 0,
left: 0,
right: 0,
}

// ✅ 仅检测是否支持 env(safe-area-inset-bottom)
const supportsEnv
= typeof window !== 'undefined'
&& 'CSS' in window
&& typeof CSS.supports === 'function'
&& CSS.supports('padding-bottom', 'env(safe-area-inset-bottom)')

const needSafeAreaBottom = !supportsEnv

return {
safeAreaInsets,
needSafeAreaBottom,
}
}

使用:

<template>
<view
:class="{ 'safe-area-bottom': needSafeAreaBottom }"
:style="{ marginTop: safeAreaInsets.top + 'px' }"
>
</view>
</template>

<script lang="ts" setup>
import { useSafeAreaBottom } from '@/hooks/useSafeAreaBottom/index'

const { safeAreaInsets, needSafeAreaBottom } = useSafeAreaBottom()
</script>