uniapp uni-popup使用scroll-view滚动时,底部按钮设置position:fixed失效,部分ios设置有问题

uniapp uni-popup使用scroll-view滚动时,底部按钮设置position:fixed失效,部分ios设置有问题

尝试过多种办法,最后发现部分机型position:fixed失效,position: sticky可以用,但是只设置sticky的话,部分机型又会有问题,无法在最底部,所以想到了嵌套的方法。

FilterPopup.vue弹框组件

html 复制代码
<template>
  <!--设置page-meta,弹框打开时禁止滚动页面-->
  <page-meta :page-style="'overflow:'+(isShow?'hidden':'visible')"></page-meta>
  <!-- 筛选 -->
  <uni-popup ref="popupFilter" type="right" background-color="#fff" @change="popupChange">
    <scroll-view scroll-y="true" class="popup-content">
      <view class="main-cont">
        <slot/>
      </view>
      <view class="bottom-fixed-bg-cont-filter"></view>
      <!--给按钮的view再包一层view,设置sticky-->
      <view class="position-sticky" :class="tabBarFilter?'tabbar-btn':''">
        <view class="bottom-fixed-btn-cont">
          <button size="large" class="button" @click="handle('reset')">重置</button>
          <button size="large" class="button button-confirm" type="info" @click="handle('submit')">确认</button>
        </view>
      </view>
    </scroll-view>
  </uni-popup>
</template>
<script setup>
import {ref} from 'vue'

const props = defineProps({
  // 如果是带有tabBar页面的筛选项,tabBarFilter传true,查询重置按钮需要根据入参重设高度
  tabBarFilter: {
    type: Boolean || undefined,
    default: ''
  },
  customClose: { // 自行处理关闭
    type: Boolean,
    default: false
  }
})
const isShow = ref(false)
const emits = defineEmits(['submit', 'reset'])
const handle = (type) => {
  emits(type)
  if (props.customClose && type === 'submit') return;
  close()
}
const popupFilter = ref(null)

function open() {
  popupFilter.value.open()
}

function close() {
  popupFilter.value.close()
}

const popupChange = (e) => {
  isShow.value = e.show
}

defineExpose({
  open,
  close
})
</script>
<style scoped lang="scss">
.popup-content {
  width: 600rpx;
  height: 100vh;
  box-sizing: border-box;

  .main-cont {
    padding: 16rpx 54rpx 0 54rpx;
    box-sizing: border-box;
  }
}

.bottom-fixed-bg-cont-filter {
  // #ifdef H5
  height: 260rpx;
  // #endif
  // #ifndef H5
  height: 180rpx;
  // #endif
  padding-bottom: constant(safe-area-inset-bottom);
  padding-bottom: env(safe-area-inset-bottom);
}

.position-sticky {
  position: sticky;
}
.bottom-fixed-btn-cont {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  height: 160rpx;
  display: flex;
  justify-content: space-between;
  align-items: center;
  background-color: #ffffff;
  padding: 10rpx 20rpx;
  padding-bottom: constant(safe-area-inset-bottom);
  padding-bottom: env(safe-area-inset-bottom);
  box-shadow: rgba(0, 0, 0, 0.08) 0 0 3px 1px;
}

</style>
相关推荐
Mintopia19 小时前
Vue3 项目如何迁移到 uni-app x:从纯 Web 到多端应用的系统指南
uni-app
Mintopia20 小时前
uni-app x 发展前景技术分析:跨端统一的新阶段?
uni-app
不爱说话郭德纲2 天前
告别漫长的HbuilderX云打包排队!uni-app x 安卓本地打包保姆级教程(附白屏、包体积过大排坑指南)
android·前端·uni-app
HashTang3 天前
【AI 编程实战】第 12 篇:从 0 到 1 的回顾 - 项目总结与 AI 协作心得
前端·uni-app·ai编程
JunjunZ3 天前
uniapp 文件预览:从文件流到多格式预览的完整实现
前端·uni-app
郑州光合科技余经理4 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
TT_Close4 天前
“啪啪啪”三下键盘,极速拉起你的 uni-app 项目!
vue.js·uni-app·前端工程化
特立独行的猫a4 天前
uni-app x跨平台开发实战:开发鸿蒙HarmonyOS影视票房榜组件完整实现过程
华为·uni-app·harmonyos·轮播图·uniapp-x
00后整顿职场4 天前
Hbuilderx APP真机无法识别iqoo Z9+手机设备解决方案
uni-app·uniapp真机调试·真机运行
前端小雪的博客.4 天前
【保姆级教程】uniAI 插件高效开发 uni-app 微信小程序(附实战案例)
微信小程序·uni-app·ai编程·uniai