收藏
回答

iOS版本16.5的手机使用uniapp开发的小程序列表滚动时卡死

框架类型 问题类型 操作系统 操作系统版本 手机型号 微信版本
小程序 Bug iOS 16.5 iPhone12 pro Max, iPhone 14 pro 8.0.38

问题描述:如图,点餐小程序,菜品向上滑动时,会同时去更新左侧 菜品分类 的状态。 代码现实见 dishScroll方法。当滚动到第二屏时,列表会直接卡死,并导致手机发热。 当把这行代码里“  :active="index == categoryActiveIndex"” 的categoryActiveIndex去掉时就不会卡顿。只在iOS16.5版本的手机中有这个问题。小程序是使用的uniapp进行开发。

请问下,这个会是什么原因?

 // 左侧分类 滑动列表    
 <scroll-view class="category-container"
      scroll-y="true"
      :scroll-into-view="scrollIntoCategoryView">
     
      <div
        v-for="(categoryItem, index) in dishList"
        :key="categoryItem.category.id"
        :id="'category-index-' + index"
        class="category-item-wrapper"
        @click="changeCategory(index)"
      >
        <CategoryItem
          :category="categoryItem.category"
          :active="index == categoryActiveIndex"  // 问题代码,这种方式使用时会导致scrollview卡死
        ></CategoryItem>
      </div>
      <div style="height: 200px"></div>
   </scroll-view>

//  右侧菜品滑动列表
 <scroll-view
      class="foods-container"
      scroll-y
      scroll-with-animation
      scroll-animation-duration="200"
      :scroll-into-view="scrollIntoView"
      @scroll="dishScroll"
      >
        
        <div
          v-for="(categoryItem, index) in dishList"
          :key="categoryItem.category.id"
          :id="'category-view-' + index"
          class="category-view-wrapper"
        >
          <div class="category-title">
            <img src="https://shilai-images.oss-cn-shenzhen.aliyuncs.com/staticImgs/common/icon-hot.png" alt="" v-if='categoryItem.category.isHotCategory' class='hot-img'>
            {{ categoryItem.category.name }}
            <div class="hot-tooltip-text" v-if='categoryItem.category.isHotCategory'>人气王|老板推荐</div>
          </div>
          <DishItem
            v-for="dishItem in categoryItem.dishList"
            :dish="dishItem"
            :key="dishItem.id"
          />
        </div>
        <div style="height: 100px"></div>
      </scroll-view>


js代码如下

 setup(props) {

    let dishScroll = useThrottleFn((e) => {
      let { categoryScrollTops } = getApp().globalData;
      let { scrollTop } = e.detail;
      //处理banner部分的高度
      if (unref(ptActivityInfo.id) || unref(fanpiaoList).length ) {
        scrollTop -= (4 + (screenWidth) * 0.2086 - 22.5);
      }
      let categoryIndex =
        scrollTop < 0
          ? 0
          : categoryScrollTops.findIndex((item) => item > scrollTop) - 1;
      if (!categoryIsClick) {
        categoryActiveIndex.value = categoryIndex;
        scrollIntoCategoryView.value = `category-index-${(categoryIndex - 3 )< 0 ? 0  : categoryIndex }`;
      }
    }, 100);

    function changeCategory(index) {
      categoryActiveIndex.value = index;
      scrollIntoView.value = "category-view-" + index;
      categoryIsClick = true;
      setTimeout(()=>{
        categoryIsClick=false
      },1000)
    }
    watch(props.dishList, (nval) => {
      setTimeout(() => {
        categoryActiveIndex.value = 0;
      }, 2000);
    });


    return {
      categoryActiveIndex,
      scrollIntoView,
      scrollIntoCategoryView,
      dishScroll,
      changeCategory
    };
  },
};
</script>


回答关注问题邀请回答
收藏

3 个回答

  • 社区技术运营专员-Jahozheng
    社区技术运营专员-Jahozheng
    2023-06-21

    现在还能复现吗

    2023-06-21
    有用
    回复 3
    • 溪水
      溪水
      2023-06-21
      能复现
      2023-06-21
      回复
    • 溪水
      溪水
      2023-06-21
      2023-06-21
      回复
    • 溪水
      溪水
      2023-06-21
      :active="index == categoryActiveIndex,这里的作用是把菜品分类名称进行标红
      2023-06-21
      回复
  • 林夕梦禾火秋
    林夕梦禾火秋
    2023-06-28

    我这里也遇到类似的问题,在ios16.5的系统中页面的表格文案里如果出现特殊的emoji,页面就会完全卡死,任何点击都不生效。最后定位到text-overflow: ellipse 和overflow: hidden不可以同时为该span元素设置。原因是text-overflow: ellipse 只在 text 组件上生效,不能应用在 view 组件上,同时需要声明 white-space: nowrap 以及 overflow: hidden。

    2023-06-28
    有用
    回复
  • 溪水
    溪水
    2023-06-21

    问题已经解决,是因为分类名称中的表情引起,只会出现在16.5中。

    2023-06-21
    有用
    回复
登录 后发表内容