vant NavBar safe-area-inset-top 一加手机失效问题

APP内嵌H5活动页, 需要实现沉浸式效果,因此APP客户端打开H5页面的时候需要开启webview全屏设置,开启之后,页面顶部会遮盖状态栏,但Vant 提供的NavBar导航栏提供了适配顶部安全区域的解决方案,就是使用safe-area-inset-top,但是出现了两个问题;

问题一: IOS手机不支持

解决方案: 设置网页在可视窗口的布局方式,只有设置了 viewport-fit=cover,才能使用 env()

<meta name="viewport" content="width=device-width, viewport-fit=cover" />

问题二:安卓获取不到safe-area-inset-top安全距离

解决方案:需要针对安卓手机,让客户端在打开H5之前在localstorage存储安全区域的值,自定义变量--safe-area-inset-top,并请将其放在根元素上,vant会自动获取该变量的值

document.documentElement.style?.setProperty("--safe-area-inset-top",  localStorage.getItem("safeAreaInsetsTop") && `${(localStorage.getItem("safeAreaInsetsTop") * 100).toFixed(2)}vh` || '48px' );

问题三:针对安卓做上述适配之后,在一加手机上还是不生效,究其原因,vant是使用env(safe-area-inset-top) 获取变量,  应该是env惹的祸

解决方案:使用js方法获取我们存好的safe-area-inset-top安全距离,然后手动修改vant NavBar组件的top值,在页面加载的时候 ,执行一下
 

// 一加手机, webview开启全屏后, vant获取不到--safe-area-inset-top, 因为不支持env, 所以修改为手动设置top值
     const setAndroidAreaTop = () => {
        if (utils.isAndroid()) {
          const areaTopDom = document.querySelector('.van-safe-area-top')
          const paddTop = document.documentElement.style.getPropertyValue(
            '--safe-area-inset-top',
          )
          areaTopDom.style.paddingTop = paddTop
          console.log(
            '--safe-area-inset-top:',
            document.documentElement.style.getPropertyValue(
              '--safe-area-inset-top',
            ),
          )
        }
      }



 onMounted(() => {
     setAndroidAreaTop()
 })

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值