坎一坤二
坎一坤二
  • 发布:2025-12-07 01:48
  • 更新:49 分钟前
  • 阅读:16

uniapp x中scroll-view竖向滚动问题的bug

分类:uni-app x

uniapp x中,scroll-view竖向滚动问题,用了各个方法,想让子项在一行中显示几个,超出的会自动换行。但是不知道为什么一行只能显示一个子项,

现在上下滑动没问题

    <scroll-view class="scroll-view" direction="vertical" >  
        <view v-for="(item, index) in aaList" :key="index" class="scroll-item">  
        </view>  
    </scroll-view>
    .scroll-view {  
            width: 100%;  
            flex: 1;  
            // height: 1000rpx;     //和高度没关系  
            border-radius: 30rpx;  
            overflow: hidden;  
            padding: 20rpx;  
            display: flex;  
            flex-wrap: wrap;  
            justify-content: center;  
            // flex-direction: column;//用row就彻底不滑动了,  
            background-color: pink;  
  }  

            .scroll-item {  
                width: 100rpx;  
                height: 110rpx;  
                background-color: #F5F5F5;  
                margin: 10rpx;  
                // 转换为行内块元素,也试了  
                //display: inline-block;  
 }
2025-12-07 01:48 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

您的问题在于直接在scroll-view上应用了flex-wrap: wrap,但uni-app x的scroll-view组件对flex布局有特殊处理。根据知识库文档App平台scroll-view组件默认高度取值为子元素高度之和,且不支持直接通过flex-wrap实现网格布局

核心问题:

  1. uni-app x中flex默认方向是column(纵向),即使设置flex-wrap: wrap也无法实现横向多列
  2. scroll-viewdirection="vertical"仅控制滚动方向,不改变内部布局逻辑

正确解决方案:

<scroll-view class="scroll-view" direction="vertical">  
  <view class="container"> <!-- 必须添加中间容器 -->  
    <view v-for="(item, index) in aaList" :key="index" class="scroll-item"></view>  
  </view>  
</scroll-view>
.scroll-view {  
  width: 100%;  
  flex: 1;  
  padding: 20rpx;  
  background-color: pink;  
  /* 移除display/flex-wrap */  
}  

.container { /* 关键:新增flex容器 */  
  display: flex;  
  flex-wrap: wrap;  
  justify-content: center;  
}  

.scroll-item {  
  width: 100rpx;  
  height: 110rpx;  
  margin: 10rpx;  
  background-color: #F5F5F5;  
}

原因说明:

  • uni-app x的flex-flow文档明确说明:"在uni-app x中默认是竖排"
  • scroll-view需要明确的高度约束才能触发滚动(参考scroll-view高度规则
  • 直接在scroll-view上使用flex-wrap会导致布局计算异常,必须通过中间容器实现网格布局

注意:确保.scroll-view有明确高度(如height: 100vh或父容器高度),否则根据文档规则,当子元素总高度等于scroll-view高度时将无法滚动。

内容为 AI 生成,仅供参考
坎一坤二

坎一坤二 (作者)

终于.......................下方是正确代码,希望对后来者有帮助!祝大家开发顺利!!

不知道为什么uniapp x要这样设计css,是真坑呀,

<scroll-view class="scroll-view" direction="vertical">  
    <view class="container">  
        <view v-for="(item,index) in aaList" :key="index" class="scroll-item">  
            {{index}}  
        </view>  
    </view>  
</scroll-view>
.scroll-view {  
    width: 100%;  
    flex: 1;  
    // height: 1000rpx;     //flex: 1;和高度,现在试的都行  
    padding: 20rpx;  
    background-color: pink;  
}  
.container {  
    // width: 100%; //中间件不能有宽高,不然不滚动  
    // height: 100%;  

    // 中间件中:下方三个少哪个都不行  
    display: flex;  
    flex-wrap: wrap;  
    flex-direction: row;  
}  

.scroll-item {  
    width: 100rpx;  
    height: 110rpx;  
    margin: 10rpx;  
    background-color: #F5F5F5;  
}

要回复问题请先登录注册