微信小程序选项卡swiper默认高度150px(让高度实现自适应)怎么解决?

本文介绍了一种解决小程序Swiper组件高度自适应的问题,通过计算子元素的高度并根据数据数量动态调整Swiper的高度,确保所有内容都能正确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先:个人感觉这是小程序的一个bug(相信以后会修复的),默认高度是150px,而且不能通过css控制让高度自适应(就是给高一个auto,在这里不起作用!!!),百度了好多方法,觉得有用的是给swiper加个固定高100vh(数据有限可以用一下),但这治标不治本啊,如果有好多数据(不如百十条)那么超过100vh高度之后的就不显示了,

正题 :首先讲一下,我的逻辑思路

在swiper标签下有一个标签,我们需要获取到子标签的高度(也就是view标签的高度),然后把这个高度*(乘以)循环数组的个数,把这个高度赋值给swiper,这样不管循环多少个数据,都能展示出来,我就是通过这种方法来实现swiper自适应效果的。

下面给一个效果图和代码片段

我没这样做之前两个数据都不能显示全(也就是下面这张图第二组李四循环都不能展示全)
在这里插入图片描述
加了之后18条都可以显示全(证明还是有用的!!!)
在这里插入图片描述
test.js
js中实现的关键函数:onLoad swiperTab

var app = getApp()
Page({

  /**
   * 页面的初始数据
   */
  data: {
    height: 0,
    widHeight:0,
    currentTab: 0,
    zhangsan: [{
        touxiang: "../../images/timg.jpg",
        zhangsan: "张三",
        time: "注册时间:2018-12-04 12:00",
        ren: "推荐人:我想静静",
        zhitui: "../../images/zhitui.png",
      },
    ],
    lisi: [{
      touxiang: "../../images/timg.jpg",
      zhangsan: "李四",
      time: "注册时间:2018-12-04 12:00",
      ren: "推荐人:我想静静",
      zhitui: "../../images/zhitui.png",
    },
    ]
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    var query = wx.createSelectorQuery();
    var that = this;
    /**
     * 获取系统信息
     */
    var zhang = this.data.zhangsan.length;
    query.select('.main').boundingClientRect(function (rect) {
      
      that.setData({
        // 获取要循环标签的高度
        height: rect.height ,
        widHeight: rect.height * zhang + "px"
      })
    }).exec();
  },
  //滑动切换
  swiperTab: function(e) {
    var that = this;
    // 获取单个轮播循环的高度
    var heights=this.data.height;
    // 获取一级成员的数组个数
    var zhang = this.data.zhangsan.length
    // 获取二级成员的数组个数
    var lisi = this.data.lisi.length
    console.log(heights)
    that.setData({
      currentTab: e.detail.current
    });
    if (this.data.currentTab==0){
      that.setData({
        widHeight: heights * zhang+"px"
      });
     // console.log(2222)
     // console.log(this.data.zhangsan.length)
    }else{
      that.setData({
        widHeight: heights * lisi + "px"
      });
      //console.log(2222)
    //  console.log(this.data.lisi.length)
    }
    // console.log(e.detail.current);
  },
  //点击切换
  clickTab: function(e) {

    var that = this;

    if (this.data.currentTab === e.target.dataset.current) {
      return false;
    } else {
      that.setData({
        currentTab: e.target.dataset.current
      })
    }
  },

test.wxml
wxml中关键代码把计算的高给swiper (style='height:{{widHeight}})

<!-- 选项卡开始 -->
<view class="swiper-tab">
  <view class="swiper-tab-item {{currentTab==0?'active':''}}" data-current="0" bindtap="clickTab">一级成员</view>
  <view class="swiper-tab-item {{currentTab==1?'active':''}}" data-current="1" bindtap="clickTab">二级成员</view>
</view>
<swiper class='swi'  current="{{currentTab}}" style='height:{{widHeight}}' duration="300" bindchange="swiperTab">
  <swiper-item>
    <view class='main' wx:for="{{zhangsan}}">
        <view class='main-top'>
          <image src='{{item.touxiang}}'></image>
        </view>
        <view class='main-middle'> 
          <view class='middle-top'>
          {{item.zhangsan}}
          </view>
          <view class='middle-zhong'>
          {{item.time}}
          </view>
          <view class='middle-bottom'>
            {{item.ren}}
          </view>
        </view>
        <view class='main-right'>
          <image src='{{item.zhitui}}'></image>
        </view>
    </view>
  </swiper-item>
  <swiper-item>
    <view class='main' wx:for="{{lisi}}">
        <view class='main-top'>
          <image src='{{item.touxiang}}'></image>
        </view>
        <view class='main-middle'> 
          <view class='middle-top'>
          {{item.zhangsan}}
          </view>
          <view class='middle-zhong'>
          {{item.time}}
          </view>
          <view class='middle-bottom'>
            {{item.ren}}
          </view>
        </view>
        <view class='main-right'>
          <image src='{{item.zhitui}}'></image>
        </view>
    </view>
  </swiper-item>
</swiper>
<!-- 选项卡结束 -->

test.wxss

/* 选项卡 */

.swiper-tab {
  width: 100%;
  /* border-bottom: 2rpx solid #ccc; */
  text-align: center;
  height: 130rpx;
  line-height: 88rpx;
  font-weight: bold;
}

.swiper-tab-item {
  display: inline-block;
  width: 160rpx;
  height: 60rpx;
  border-radius: 10rpx;
  background: #ccc;
  margin: 35rpx 10rpx;
  line-height: 60rpx;
}

.active {
  color: white;
  width: 160rpx;
  height: 70rpx;
  background: white;
  border-radius: 10rpx;
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAiBAMAAAA61UNUAAAAJFBMVEUAAABYm/9Ym/9Ym/9Ym/9Ym/9Ym/9Ym/9Ym/9Ym/9Ym/9Ym/9m89iCAAAAC3RSTlMA5oBKSRfTv6mPB8U+K6cAAABESURBVDjLY3DcTRQQYZAmTuFGht1EglGFowpHFY5khUQXKYbEKRRmwATau3dvC2AgAjDt3l3KQBTQ3rGAOIVME7AIAgCbgW/AGyyKMgAAAABJRU5ErkJggg==);
  background-size: 100% 100%;
}

/* 成员 */

.swi {
  width: 100%;
  /* height: 100vh !important; */

}

.main {
  height: 180rpx;
  display: flex;
  align-items: center;
  border-bottom: 1rpx solid #ccc;
  margin: 0 25rpx;
}

.main-top {
  height: 100rpx;
  width: 100rpx;
  padding: 0 50rpx 0 10rpx;
}

.main-top image {
  height: 100rpx;
  width: 100rpx;
}

.main-right {
  width: 70rpx;
  height: 30rpx;
}

.main-right image {
  width: 70rpx;
  height: 30rpx;
}

.main-middle {
  width: 470rpx;
}

.middle-top {
  font-size: 30rpx;
  font-weight: bold;
  margin-bottom: 25rpx;
}

.middle-zhong {
  font-size: 25rpx;
  color: #b0b0b0;
  margin-bottom: 10rpx;
}

.middle-bottom {
  font-size: 25rpx;
  color: #b0b0b0;
}

.main-right {
  margin-bottom: 105rpx;
}

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值