uni-app ios原生下拉刷新(circle)与swiper组件存在冲突
uni-app ios原生下拉刷新(circle)与swiper组件存在冲突
信息类别 | 详细信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | win11 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.26 |
手机系统 | iOS |
手机系统版本号 | iOS 17 |
手机厂商 | 苹果 |
手机机型 | ipone12 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
App下载地址或H5网址 | https://apps.apple.com/cn/app/%E9%98%91%E7%8F%8A%E5%A4%84/id6479599905 |
操作步骤:
pages.json开启:
"app-plus": {
"pullToRefresh": {
"support": true,
"style": "circle",
"offset": "50px"
}
}
然后页面里使用swiper,在ios手机上测试
预期结果:
流畅
实际结果:
被下拉刷新阻塞
bug描述:
ios中,当页面开启原生下拉刷新时,页面有swiper,你左右滑动swiper,及其容易导致swiper卡着不动,这个bug让我一顿好找,真离大谱了,痛苦死我了
我上传的压缩包是视频,可以看看滑动是什么样子的,也可以appstore搜索“阑珊处”,点击一个笔记,进去感受
你好,我这边用swiper + pullToRefresh 下拉刷新配置,没有复现问题。 你这边提供一下可复现的demo工程。
使用你提交的包,在HbuilderX 4.32-alpha,是能复现的
回复 8***@qq.com: 不只是HbuilderX 4.32-alpha,我用的HbuilderX 4.29也有这个问题
你们能复现啥问题啊。我4.36也碰到此问题。
我也出现这个问题了,更新完4.28版本之后重新打基座就出现这个问题了
有解决吗?
来个人管管呗,两个多月过去了问题还在,体验很差啊
在uni-app中,当使用iOS原生下拉刷新(circle)与swiper组件时,确实可能会遇到冲突问题。这种冲突通常表现为下拉刷新后swiper组件的行为异常,比如无法正确滑动或内容显示不正确。以下是一个示例代码,展示了如何结合使用这两个组件,并通过一些技巧来解决潜在的冲突。
首先,确保你的uni-app项目已经配置好了iOS原生下拉刷新。这通常是在pages.json
中配置页面的extra
属性,例如:
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页",
"enablePullDownRefresh": true,
"extra": {
"ios": {
"pullRefresh": {
"support": true,
"indicator": "circle"
}
}
}
}
}
]
}
接下来,在你的页面中使用swiper组件。为了避免冲突,你可以在页面加载完成和下拉刷新完成后重新初始化swiper。以下是一个简单的示例:
<template>
<view>
<swiper
ref="mySwiper"
:autoplay="false"
:interval="3000"
:duration="500"
circular
indicator-dots
>
<swiper-item v-for="(item, index) in items" :key="index">
<view>{{ item }}</view>
</swiper-item>
</swiper>
</view>
</template>
<script>
export default {
data() {
return {
items: ['Slide 1', 'Slide 2', 'Slide 3']
};
},
onLoad() {
this.initSwiper();
},
onPullDownRefresh() {
// 模拟数据刷新
setTimeout(() => {
this.items = ['New Slide 1', 'New Slide 2', 'New Slide 3'];
uni.stopPullDownRefresh();
this.$nextTick(() => {
this.initSwiper();
});
}, 1000);
},
methods: {
initSwiper() {
// 使用uni-app的$refs获取swiper实例并重新初始化
this.$refs.mySwiper.swiper.init();
}
}
};
</script>
注意,this.$refs.mySwiper.swiper.init();
这一行是关键,它尝试在swiper组件上调用init
方法来重新初始化swiper。然而,需要注意的是,uni-app的swiper组件可能并不直接暴露init
方法,这里的调用是一个示意,实际中可能需要通过其他方式(如重新渲染swiper组件)来确保swiper在下拉刷新后能够正常工作。
此外,由于uni-app和原生组件的交互可能受到平台限制,建议在实际开发中详细测试不同平台和版本的表现,并根据需要进行调整。