首页 > 其他分享 >uniapp开发ios,scroll-view横向滚动失效,动态获取scroll-view内部子容器总宽度,然后添加个宽度为1,高度跟子元素总宽度相等的view即可

uniapp开发ios,scroll-view横向滚动失效,动态获取scroll-view内部子容器总宽度,然后添加个宽度为1,高度跟子元素总宽度相等的view即可

时间:2024-03-22 17:12:38浏览次数:17  
标签:滚动 元素 横向 宽度 scroll view

这是老bug了,官方一直没有解决掉。已经摸索到完美解决方案,遇到这个问题的可以看下。

本文以三级导航页面中的二级横向滚动导航为例,说明如何做到不同宽度子元素的横向滚动。

bug定位:

本来横向滚动只要子元素宽度大于scroll-view固定宽度就可以滚动的,但是IOS App开发中子元素高度必须要大于scroll-view宽度才能滚动,应该是拿错参数了。
解决方案:
scroll-view内部添加一个宽度为1像素的透明的占位View把内部容器的高度撑大即可(下图红色线条所示),高度为子元素的总宽度(下图蓝框),这样无论有多少个子元素,都能做到自适应滚动了。

具体操作如下:

  1. ScrollView里边的子元素必须有一个父容器,没有的话先添加一个,并设置为横向布局。
  2. 在获取到子元素数据之后通过dom.getComponentRect来获取子元素父容器的总宽度。
  3. 添加一个与子元素父容器同级的宽度为1像素的透明的占位view,高度设置为子元素父容器的宽度。

如此即可,问题完美解决,横向可以滚动了,也不影响界面展示。

由于是动态获取子元素总宽度作为占位View的高度,所以即使子元素是动态数据,也能做到自适应滚动的。
示例代码如下:

     <scroll-view  
          class="header flex_wrap flex_center bg_grey flex_top on"  
          scroll-x="true"  
          :scroll-into-view="scroll_into_view0"  
          scroll-with-animation="true"  
          show-scrollbar="false"  
        >  
          <!--占位用-->
          <view id="navStart" class="bg_red" style="width:1rpx;" :style="{ height: subNavWidth * 2 + 'rpx' }"></view>
          <!--子元素父容器,获取总宽度用-->
          <view ref="subNav" class="flex_row">  
            <text  
              :id="'nav' + index"  
              class="btn f12 border_radius30"  
              :class="activeIndex2 == index ? 'active bg_grey' : 'bg_white'"  
              @click="headerNavClick(index)"  
              v-for="(item, index) in topNavList"  
              :key="index"  
            >  
              {{ item.sub_rack_name }}  
            </text>  
          </view>  
        </scroll-view>
     var refDom = this.$refs.subNav;  
      var result = dom.getComponentRect(refDom, option => {  
        this.subNavWidth = option.size.width;  
      });

PS:即使是固定内容的横向滚动,也要添加高度不小于滚动内容总宽度的,如果已经知道具体数值可以直接写,不用再通过dom获取。

标签:滚动,元素,横向,宽度,scroll,view
From: https://www.cnblogs.com/xyyt/p/18089957

相关文章

  • openlayers 入门教程(三):view 篇
    还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。No.内容链接1Openlayers【入门教程】-......
  • viewer
    <viewer:images="fileimagelist"><divv-for="(src,index)infileimagelist":key="src":src="src"><imgv-show="scope.$index===index"class="imgbox"......
  • Android View的动画效果,上移展示和下移隐藏
    原文:AndroidView的动画效果,上移展示和下移隐藏-Stars-One的杂货小窝项目里的一个小需求(实际是要和手势操作一起,上滑和下拉触发此动画效果),记录一下PS:本篇先记录下动画效果,下篇再将如何监听滑动手势效果原理实际通过View的translationY的属性来实现上移代码val......
  • Multi-View Graph Convolutional Network for Multimedia Recommendation
    目录概符号说明MGCNMotivationBehavior-GuidedPurifierMulti-ViewInformationEncoderBehavior-AwareFuserPredicitonOptimation代码YuP.,TanZ.,LuG.andBaoB.Multi-viewgraphconvolutionalnetworkformultimediarecommendation.MM,2023.概本文主要处理模......
  • clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop
    一、定义document.body.clientHeight网页可见区域高度document.body.scrollHeight网页正文全文高document.body.offsetHeight网页可见区域高(包括边线的高)document.body.scrollTop网页被卷去的高window.screen.height屏幕分辨率高        ......
  • [ARC174B] Bought Review 题解
    【题目描述】你开了一家店,有\(A_i\)个\(i\)星级评论,你可以花费\(P_i\)元买到一个\(i\)星评论,问使得这家店评论的星星平均值不小于\(3\),最少要花多少钱。\(1\lei\le5\)。【思路】首先读入,判断平均值是否小于\(3\),如果大于等于,直接输出\(0\)​然后根据\(3\t......
  • Salesforce LWC学习(四十九) RefreshView API实现标准页面更新,自定义组件自动捕捉更新
    本篇参考: https://developer.salesforce.com/docs/platform/lwc/guide/data-refreshview.htmlhttps://developer.salesforce.com/docs/platform/lwc/guide/reference-lightning-refreshview.htmlhttps://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007KX6dA......
  • Linux Interview questions
    @@用户管理面试题:开机bios自检,检测硬件的问题主板CPU内存硬盘电源在企业中出问题最多的硬件:硬件服务器IDC机房自建机房1.磁盘出了问题怎么办?磁盘的详细属性互联网公司:表现的有经验1).是否在保质期内3年如果保质期3年内,联系售后直接换新的2).过了保质期,......
  • uni-app、uview开发时的三种富文本渲染方案
    来源:https://www.shanhubei.com/archives/51231.html1.使用vue语法的v-html<!--使用v-html渲染富文本--><!--<viewv-html="`<h1>富文本</h1><h2>富文本</h2><h3>富文本</h3>`"></view>-->2.使用小程序标签rich-text&l......
  • USACO24OPEN Bessie's Interview S 题解
    题意简述:有\(n\)个奶牛,\(k\)个农夫,\(k\len\),每一个奶牛有一个面试时长\(t_i\),表示面试这个奶牛要多长时间。\(0\)时刻时对于所有的\(1\lei\lek\),第\(i\)个农夫会面试第\(i\)个奶牛,之后的面试顺序满足以下条件:若在某时刻\(t\),存在某个农夫已经面试完当前的奶牛,那......