3***@qq.com
3***@qq.com
  • 发布:2021-04-19 16:17
  • 更新:2021-06-11 11:44
  • 阅读:1429

【报Bug】scroll-view设置了scroll-anchoring,在iOS不生效

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10 64位

HBuilderX类型: 正式

HBuilderX版本号: 3.1.7

手机系统: iOS

手机系统版本号: IOS 14

手机厂商: 苹果

手机机型: 全部

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

<template>
<view class="container">
<scroll-view :scroll-y="true" class="scroll-view" :scroll-anchoring="true"
@scrolltoupper="clickBtn1" @scrolltolower="clickBtn2">
<view class="msg-item" v-for="(item, index) in msgList" :key="'msg' + item" :id="'msg' + item">{{ item }}</view>
</scroll-view>
<view class="btn" @click="clickBtn1">往上添加</view>
<view class="btn" @click="clickBtn2">往下添加</view>
</view>
</template>

<script>
export default{
data(){
return{
msgList:[100, 101, 102,103,104,105]
}
},
onShow() {
this.msgList=[100, 101, 102,103,104,105];
},
methods:{
clickBtn1() {
let firstNum = this.msgList[0];
for (let i = 1; i <= 3; i++) {
this.msgList.unshift(firstNum - i);
}
},
clickBtn2() {
let lastNum = this.msgList[this.msgList.length - 1];
for (let i = 1; i <= 3; i++) {
this.msgList.push(lastNum + i);
}
}
}
}
</script>

<style lang="scss">
.container {
padding-top: 100rpx;
.scroll-view {
height: 200rpx;
background-color: #dddddd;
overflow-anchor: auto;
-webkit-overflow-anchor: auto;
.msg-item {
margin-left: 20rpx;
}
}

.btn {  
    width: 150rpx;  
    height: 50rpx;  
    background-color: #2b85e4;  
    margin-top: 50rpx;  
    color: #ffffff;  
}  

}
</style>

操作步骤:

下拉到顶部,或者点击”往上添加“按钮,往数组前面添加更多数据,模拟聊天过程中下拉加载更多聊天记录

预期结果:

保持在添加数据之前的画面,滚动位置不随内容变化而抖动,不会往上滚到到顶部

实际结果:

会往上滚到到顶部

bug描述:

使用scroll-view,设置属性:scroll-anchoring="true"
下拉到顶部,加载更多数据,然后ios自动会往上滚到顶部

2021-04-19 16:17 负责人:无 分享
已邀请:
3***@qq.com

3***@qq.com (作者)

还有,如果使用scroll-into-view滚回来的话,会有闪动,非常不友好,我们是真的面前客户的,不能这样做

3***@qq.com

3***@qq.com (作者)

这个问题其实卡了我们半年了,如果找不到解决方法可能要考虑其他框架了~

左右摇摆

左右摇摆

不会把。我用ios没问题呀

  • 3***@qq.com (作者)

    能把大致的源码给我看一下吗?

    2021-04-19 18:38

  • 左右摇摆

    回复 3***@qq.com: 你用scroll-view 是显示固定宽高吗? 我列表遍历没有用scroll-view 直接就是数据展示。

    2021-04-20 10:04

  • 3***@qq.com (作者)

    回复 左右摇摆: 这个肯定有固定高的

    2021-04-20 15:06

3***@qq.com

3***@qq.com (作者)

这是官方给的属性,就是不生效

木杉丶

木杉丶 - 你喜或悲,他也都在那里

是自动滚动的那个情况,然后突然是不是就闪动要不就是不见了要不就是闪的高度有问题那种

  • 3***@qq.com (作者)

    就是页面上方加载更多数据后,会自动滚动到最上面

    2021-04-20 16:51

3***@qq.com

3***@qq.com (作者)

唉,官方都没来回复一下么~

Mr小

Mr小

我采用的是scroll-view倒序加载数据 enable-flex="true" display: flex; flex-direction: column-reverse; 目前的问题是上拉加载触发问题,本来用bindscrolltoupper 但是ios倒叙后scrolltop为负数 一滑动就会触发,然后改成enhanced 增强特性的binddragend滑动监听 scrolltop打印是正的,但是发现ios12无法触发滚动函数,xr可以。

  • 3***@qq.com (作者)

    感谢回复,我回去试试

    2021-05-11 19:48

  • Mr小

    回复 3***@qq.com: 后来是ios用监听滑动的高度和内容高度是否相等来区别是否滑动到顶部,安卓用scroll-view的触顶函数,现在体验不错。 ----- 一个多月了 想起来来和你说下-----

    2021-06-26 11:04

8***@qq.com

8***@qq.com

大佬,解决了吗

该问题目前已经被锁定, 无法添加新回复