收藏
回答

iOS15.4特定写法下高度塌陷(iOS14.7正常)

框架类型 问题类型 操作系统 操作系统版本 手机型号 微信版本
小程序 Bug iOS iOS15.4 iPhone12 Pro Max 8.0.18
<view style="display:flex;flex-direction: column;">
  <view style="display:flex;flex-direction: column;flex:1; height: 200px;">
    <scroll-view scroll-y style="flex: 1;overflow: hidden;">
        <view class="card">测试占位1</view>
        <view class="card">测试占位2</view>
        <view class="card">测试占位3</view>
    </scroll-view>
  </view>
</view>

这段代码在 iOS 15.4 与 iOS 14.7 上表现不同,如图所示:

请忽略上面样式代码有些不太规范的地方,主要想咨询一下为什么两个iOS版本会有不同的表现,以及iOS15.4是否还有其他场景与历史版本样式表现不同。

其他信息:

  • iOS 15.4 微信版本号 8.0.18
  • iOS 14.7 微信版本号 8.0.17
回答关注问题邀请回答
收藏

6 个回答

  • chyi
    chyi
    置顶回答2022-05-07

    经确认是苹果新版本 safari (webkit) 的问题,用以下纯 h5 代码在 safari 下同样可以复现高度塌陷。


    https://codepen.io/tidyzq/pen/eYVJZMV


    目前观察到该问题需要同时满足设置 css 样式 overflow 和 flex-basis: 0%; ,该问题从微信/小程序层面也无法修复/绕过。


    楼主提供的片段之所以复现,是由于 flex 属性存在默认属性:

    flex: 1;
    // 等价于
    flex: 1 1 0%;
    // 等价于
    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: 0%;
    

    因此,使用 flex: 1; (或其他单个数字如 flex: 5;)皆会导致 flex-basis 被设置为 flex-basis: 0% 进而触发了 safari 的 bug


    若 flex-basis: 0% 并非预期,则建议将 flex: 1; 修改为 flex: 1 1 auto; 来绕过该问题

    2022-05-07
    有用 2
    回复
  • 社区技术运营专员-Jahozheng
    社区技术运营专员-Jahozheng
    2022-03-17

    问题已复现,可以按照楼上用户提供方案暂时规避一下, 这边排查一下

    2022-03-17
    有用
    回复 10
    • w_西辰
      w_西辰
      2022-03-17
      好的,主要担心还有没有其他场景也有问题,有进展辛苦同步一下~
      2022-03-17
      回复
    • 山野村夫
      山野村夫
      2022-03-17
      持续观望
      2022-03-17
      回复
    • 山野村夫
      山野村夫
      2022-03-23
      现在还没修复吗?
      2022-03-23
      回复
    • 艾泽拉斯的勇士
      艾泽拉斯的勇士
      2022-03-23
      什么时候可以修复
      2022-03-23
      回复
    • Z.S
      Z.S
      2022-03-25
      大概什么时候能修复
      2022-03-25
      回复
    查看更多(5)
  • 布吉岛叮咚鸡
    布吉岛叮咚鸡
    2022-03-28

    ios15.4,flex布局子元素的before伪元素无效,连带着子元素的内容一起消失。

    因为是在领导的手机上看的,他刚升了ios15.4,我没苹果手机,不好复现给你们看,你们自己测测

    2022-03-28
    有用 1
    回复 1
  • Code Weaver
    Code Weaver
    2022-03-15

    ios15.3.1正常,我升级下15.4

    __________________________________________________________

    问题确实存在,尝试删除外层的view,就正常了。

    <view style="display:flex;flex-direction: column;">
      <view style="display:flex;flex-direction: column;flex:1; height: 200px;">
        <scroll-view scroll-y style="flex: 1;overflow: hidden;">
            <view class="card">测试占位1</view>
            <view class="card">测试占位2</view>
            <view class="card">测试占位3</view>
        </scroll-view>
      </view>
    </view>
    改为
      <view style="display:flex;flex-direction: column;flex:1; height: 200px;">
        <scroll-view scroll-y style="flex: 1;overflow: hidden;">
            <view class="card">测试占位1</view>
            <view class="card">测试占位2</view>
            <view class="card">测试占位3</view>
        </scroll-view>
      </view>
    
    2022-03-15
    有用
    回复 2
    • w_西辰
      w_西辰
      2022-03-16
      嗯,情况比较特殊。不知道15.4的web上会不会也有问题,这两天还没时间测试
      2022-03-16
      回复
    • Code Weaver
      Code Weaver
      2022-03-16回复w_西辰
      emmm还不清楚原因。
      2022-03-16
      回复
  • 二零二一
    二零二一
    发表于移动端
    2022-03-14
    ^_^^_^*
    2022-03-14
    有用
    回复
  • Listen
    Listen
    2022-03-14

    加个 enable-flex 属性试试

    

    2022-03-14
    有用
    回复 1
    • w_西辰
      w_西辰
      2022-03-14
      这样改,表现还是一样的
      2022-03-14
      回复
登录 后发表内容