uni-app uni-popup使用uni-grid布局重叠

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app uni-popup使用uni-grid布局重叠

类别 信息
产品分类 uniapp/小程序/微信
PC开发环境 Mac
操作系统版本 Ventura 13.6.6
HBuilderX类型 正式
HBuilderX版本 4.24
工具版本号 1.06.2307260
基础库版本 3.5.8
项目创建方式 HBuilderX

示例代码:

<uni-popup ref="showpopup" type="center">
<view style="width:100%;border-radius: 20rpx;height: 500rpx;background-color: #FFFFFF;display: flex;flex-direction: column;">
<view style="width:100%;">
<uni-grid style="display: flex;align-items: center;justify-content: center;" :column="8" :show-border="false" >
<uni-grid-item v-for="(item,index) in listData" :index="index" :key="index">
<view  style="display: flex;width: 100%;background-color: #FEECEA;height:  100%;border: 1rpx solid #FFFFFF;border-top:0rpx solid #FFFFFF;align-items: center;justify-content: center;">
<text  style="flex: 1;color: #000000;text-align: center;font-size: 23rpx;">{{item.name}}</text>
</view>
</uni-grid-item>
</uni-grid>
</view>
</view>
</uni-popup>

操作步骤:

  • uni-popup使用uni-grid布局重叠

预期结果:

  • uni-popup使用uni-grid正常展示

实际结果:

  • uni-popup使用uni-grid布局重叠

bug描述:

  • uni-popup使用uni-grid布局重叠

5 回复

感谢反馈,之后会对这种情况进行调整,让grid可以方便的使用


现在是不是计算了每个格子的宽高那些,而popup有动画还没渲染完成导致的

回复 靐齉齾麤龖龗: 暂时判断是宽度不够引起的,且微信小程序渲染有问题。可以看我下面的图片

你好,这个问题彻底解决可能还需要些时间,经过测试给您一个临时解决方案:
在 popup 中内部的内容加上一个 v-if 进行控制,在 open 之前修改为 true
<uni-popup ref=“popup” background-color="#fff" @change=“change” border-radius=“10px 10px 0 0”>
<view style="width: 500rpx;height: 200rpx;" v-if="show">
<uni-grid :column="4" :showBorder="true">
<uni-grid-item>
<text class="text">文本</text>

在uni-app中,使用uni-popup组件结合uni-grid布局时,如果遇到布局重叠的问题,通常是因为样式或布局设置不当。以下是一个示例代码,展示如何在uni-popup中正确使用uni-grid布局,并确保布局不重叠。

首先,确保你的项目中已经引入了uni-ui组件库,或者你有自定义的样式处理重叠问题。

示例代码

1. 页面模板 (template)

<template>
  <view>
    <button @click="showPopup = true">打开弹窗</button>
    <uni-popup ref="popup" :show="showPopup" mode="bottom" @close="showPopup = false">
      <view class="popup-content">
        <uni-grid :column="4">
          <uni-grid-item v-for="(item, index) in gridItems" :key="index">
            <view class="grid-item">{{ item }}</view>
          </uni-grid-item>
        </uni-grid>
      </view>
    </uni-popup>
  </view>
</template>

2. 脚本部分 (script)

<script>
export default {
  data() {
    return {
      showPopup: false,
      gridItems: ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5', 'Item 6', 'Item 7', 'Item 8']
    };
  }
};
</script>

3. 样式部分 (style)

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

.grid-item {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 100px;
  border: 1px solid #ddd;
  box-sizing: border-box;
}

/* 确保uni-grid和uni-grid-item的样式不会导致重叠 */
uni-grid {
  width: 100%;
}

uni-grid-item {
  flex-shrink: 0; /* 防止内容过多时项目缩小导致重叠 */
}
</style>

解释

  • 模板部分:使用uni-popup组件来创建一个底部弹窗,并在弹窗内容中使用uni-grid布局。uni-grid-item通过v-for指令循环渲染。
  • 脚本部分:定义了弹窗的显示状态和网格项数据。
  • 样式部分:为弹窗内容和网格项定义了基本样式。特别地,设置了uni-grid-itemflex-shrink属性为0,以防止内容过多时项目缩小导致重叠。

这个示例代码提供了一个基本的框架,确保uni-popup中的uni-grid布局不会重叠。如果你遇到特定的问题,可能需要根据具体情况调整样式或布局逻辑。

回到顶部