关于小程序中swiper组件设置flex属性在IOS上的问题(解决方案)

发布于 6 年前作者 cuiyong15014 次浏览最后编辑 6 年前来自 ask

小程序的swiper组件设置flex属性后,它的子组件swiper-item在IOS上会显示为默认的150px值,实验了各种方法,今天终于解决了问题,给大家分享一下!

wxml代码:

<view id="shelfMain">
        <swiper id="shelfGoods" current="{{selectIndex}}" catchchange="swiperChange">
            <block wx:for="{{shelfData}}" wx:for-item="goods" wx:for-index="shelfIndex" wx:key="shelf">
                <swiper-item class="shelfItem" class="swiperItem">
                    <template is="shelfList" data="{{goods,shelfIndex,orderList}}"></template>
                </swiper-item>
            </block>
        </swiper>
    </view>


开始只在swiper设置flex布局,然后在真机测试中安卓手机是没有任何问题的,但是IOS出现了问题,就是IOS只显示了150px,就是swiper-item的高度;

1.第一步解决思路是在外层报上shelfMain 设置上flex 然后设置但swiper设置

width: 100%;

height: 100%;

但是进入真机测试的话,只有IOS11以上可以正常显示,而低版本的IOS直接没有任何显示内容(其他的方法也是尝试了无数,哭哭哭)

2.祭出大招:使用一种css方式将其充满shelfMain的flex布局

#shelfMain {
  width: 100%;
  flex: 1;
  position: relative;
}
 
#shelfGoods {
  width: 100%;
  height: 100%;
  position: absolute;
  left: 0;
  top:0;
  bottom: 0;
  right: 0;
}

使用这段CSS发现,神奇的事情发生了,直接全部OK,swiper充满了shelfMain的flex布局的所有地方,然后再IOS和安卓上都没有了任何问题

将这种解决方法提供出来,让大家避免坑

7 回复
sunxiulan
sunxiulan1 楼6 年前

这个如果swiper不设置高度,page不设置高度,还是不能让swiper显示的呢

leixiang
leixiang2 楼6 年前

握草,我找了各种方式,没想到这样就搞定了…    感谢!

hetao
hetao3 楼6 年前

找了各种flex兼容的方法,搞不定。非常感谢。

mengping
mengping4 楼6 年前

我目前还是无法自适应

nalu
nalu5 楼6 年前

但是还是想知道原因,是小程序样式的bug 还是用了别的什么样式影响到了…

bsu
bsu6 楼6 年前

必须用flex啊。。

page {
  width: 100%;
  height: 100%;
}
.page {
  width: 100%;
  height: 100%;
  display: flex;
  flex-direction: column;
  background: #f0f0f2;
}
 
.swiper-tab{
  height: 100%;
  margin: 0rpx 0rpx 12rpx 0rpx;
  flex: 1 0 300rpx;
 
.swiper-item {
  height: 100%;
}
 
这样没问题
eqiao
eqiao7 楼4 年前

想请问下 你这种做法能让swiper 根据内容自适应吗?