uni-app cli nvue userInteractionEnabled 在安卓上失效
uni-app cli nvue userInteractionEnabled 在安卓上失效
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
PC开发环境 | Windows | CLI |
手机系统 | Android | |
手机系统版本号 | Android 8.0 | |
手机厂商 | 模拟器 | |
手机机型 | vivo | |
页面类型 | nvue | |
vue版本 | vue3 | |
打包方式 | 云端 | |
CLI版本号 | 3.0.0-alpha-3040520220408002 |
示例代码:
<view @click="a=50">
<view @click="a=10" :userInteractionEnabledn="false" >
</view>
</view>
操作步骤:
- 如上述代码,定义变量a
预期结果:
- a=50
实际结果:
- a=10
bug描述:
安卓上实测nvue中view上使用:userInteractionEnabledn = "false"
事件不会向下传递。但在ios上是可以的。因此在安卓上是有bug的。
官方重视下
你好 ,:userInteractionEnabled属性只在ios有效 , Android无效。
这就有点坑了呀。因为这一个问题布局就会非常的麻烦哈。哎。官方能解决下吗。ios有用。可以跨端,但你这个安卓又无法向下传递事件。关键是它会阻下往下传递。这做跨端非常不好搞呀。
回复 tmui: Android不会拦截事件,ios是通过uiview的userInteractionEnabled配置是否响应事件的开关,考虑disabled来控制事件吧 。
回复 DCloud_Android_THB: 看我的示例。确实在安卓下被拦截了呀。它不会往下传递。
你答对了,本来就无效;
根据我的示例,Android是不会拦截掉事件的。
<template>
<view>
<view class=“A” @click=“handleA” :userInteractionEnabled=“false”>
<view class=“B” @click=“handleB”></view>
</view>
</view>
</template>
麻烦你看下,我下一条回复的测试动图。谢谢你的耐心。也附带了你的示例。 测试环境:cli nvue 3.0.0-alpha-3040620220415002 vite2.8.5 雷电模拟器安卓7.1.2 模拟机型华为
从动画上可以看出:我点了绿色,结果是50,并不是我想要的20,同时我也测试了底下红色的函数打印logo,也证明点击绿色,并不会打印出日志。所我不管怎么测试,证据都是表明事件被在绿色上发现,不会传递到下方的红色上去。
回复 tmui: 我使用你的代码测试 ,事件也没有拦截,你留一下qq,我详细给你看看吧。
回复 DCloud_Android_THB: 我已经私信你,另外还有一个scroll-view的问题。我不知道是不是不兼容模拟器安卓的问题。
在 uni-app
中使用 nvue
开发时,userInteractionEnabled
属性在 Android 平台上失效可能是由于以下原因之一:
1. 平台差异
userInteractionEnabled
是 iOS 平台特有的属性,用于控制视图是否响应用户交互。在 Android 平台上,这个属性可能不被支持或表现不一致。- 在 Android 上,通常使用
enabled
或clickable
属性来控制视图的交互性。
2. 替代方案
-
如果你需要在 Android 上实现类似的功能,可以尝试使用
enabled
或clickable
属性。 -
例如,在
nvue
中,你可以通过设置enabled
属性来控制视图是否响应用户交互:<view :enabled="isEnabled" @click="handleClick"> <!-- 内容 --> </view>
在
script
部分:export default { data() { return { isEnabled: true }; }, methods: { handleClick() { if (this.isEnabled) { // 处理点击事件 } } } };
3. 检查 nvue
版本
- 确保你使用的
uni-app
和nvue
版本是最新的,因为某些问题可能在新版本中已经修复。
4. 平台特定代码
-
如果你需要为 iOS 和 Android 分别处理交互性,可以使用条件编译:
<view :userInteractionEnabled="isEnabled" v-if="platform === 'ios'"> <!-- iOS 内容 --> </view> <view :enabled="isEnabled" v-else> <!-- Android 内容 --> </view>
在
script
部分:export default { data() { return { isEnabled: true, platform: uni.getSystemInfoSync().platform }; } };