uni-app uni-popup在tabbar页面弹出被原生tabbar遮挡问题。真机下

uni-app uni-popup在tabbar页面弹出被原生tabbar遮挡问题。真机下

开发环境 版本号 项目创建方式
Windows Windows 10 专业版 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.4.7

手机系统:Android

手机系统版本号:Android 6.0

手机厂商:华为

手机机型:huawei MLA-TL10

页面类型:vue

vue版本:vue2

打包方式:离线

项目创建方式:HBuilderX

操作步骤:

  • 在tabbar调用uni-ui中uni-popup组件

预期结果:

  • uni-popup组件遮罩应该在原生tabbar页面上,在uni.showT…下

实际结果:

  • uni-popup组件遮罩在原生tabbar页面,在uni.showT…下

bug描述:

  • bug: tabbar页面弹出会被原生tabbar遮挡。原生的层级是998,但是给popup999在h5页面能正常显示,在真机下还是会被原生tabbar遮挡。需要留意uni.showT…的层级好像是999。一加8T也是和手机系统应该没关系
5 回复

原生层级问题。可以使用以下两种方式解决:

动态显示隐藏Tabbar相关API:uni.setTabBarItem 动态设置 tabBar 某一项的内容
使用 SubNVue 解决App中 vue 页面中的层级覆盖和原生界面灵活自定义。相关文档:原生子窗体


这个SubNVue是不是可以封装成一个自定义tabbar而且可以解决第一次闪屏的问题?感觉有点复杂得细看下文档了 PS:我自己提的这个问题其实很好解决,直接change里面uni.hideTabBar()和uni.showTabBar()就可以了

回复 [已删除]: 只是觉得组件不够完善

没有tabbar最下方的也会被遮住,滚动到最下方,请问怎么解决呢

uni-app 中使用 uni-popup 组件时,如果在 tabbar 页面弹出,可能会遇到弹出层被原生 tabbar 遮挡的问题。这是因为原生 tabbar 的层级较高,导致 uni-popup 的弹出层无法覆盖它。

解决方案

1. 使用 cover-viewcover-image

uni-app 提供了 cover-viewcover-image 组件,它们可以覆盖原生组件(如 tabbar)。你可以将 uni-popup 的内容放在 cover-view 中,以确保它能够覆盖 tabbar

<template>
  <view>
    <uni-popup ref="popup" type="bottom">
      <cover-view class="popup-content">
        <!-- 你的弹出内容 -->
      </cover-view>
    </uni-popup>
  </view>
</template>

<style>
.popup-content {
  background-color: #fff;
  padding: 20px;
}
</style>

2. 使用 z-index

你可以尝试通过设置 z-index 来提高 uni-popup 的层级,使其覆盖 tabbar。不过,这种方法在某些情况下可能无效,因为原生 tabbar 的层级可能无法通过 z-index 来覆盖。

<template>
  <view>
    <uni-popup ref="popup" type="bottom" :style="{ zIndex: 9999 }">
      <view class="popup-content">
        <!-- 你的弹出内容 -->
      </view>
    </uni-popup>
  </view>
</template>

<style>
.popup-content {
  background-color: #fff;
  padding: 20px;
}
</style>

3. 使用 pageoverflow 属性

你可以通过设置 pageoverflow 属性为 hidden,来隐藏 tabbar,然后再显示 uni-popup

<template>
  <view>
    <uni-popup ref="popup" type="bottom" @change="handlePopupChange">
      <view class="popup-content">
        <!-- 你的弹出内容 -->
      </view>
    </uni-popup>
  </view>
</template>

<script>
export default {
  methods: {
    handlePopupChange(e) {
      if (e.show) {
        uni.setPageStyle({
          style: {
            overflow: 'hidden'
          }
        });
      } else {
        uni.setPageStyle({
          style: {
            overflow: 'visible'
          }
        });
      }
    }
  }
}
</script>

<style>
.popup-content {
  background-color: #fff;
  padding: 20px;
}
</style>

4. 使用 uni.hideTabBaruni.showTabBar

你可以在弹出 uni-popup 时隐藏 tabbar,关闭时再显示 tabbar

<template>
  <view>
    <uni-popup ref="popup" type="bottom" @change="handlePopupChange">
      <view class="popup-content">
        <!-- 你的弹出内容 -->
      </view>
    </uni-popup>
  </view>
</template>

<script>
export default {
  methods: {
    handlePopupChange(e) {
      if (e.show) {
        uni.hideTabBar();
      } else {
        uni.showTabBar();
      }
    }
  }
}
</script>

<style>
.popup-content {
  background-color: #fff;
  padding: 20px;
}
</style>
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!