uni-app uni.showActionSheet第100条在安卓无法选择
uni-app uni.showActionSheet第100条在安卓无法选择
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | Win11 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Windows
HBuilderX类型:正式
HBuilderX版本号:3.96
手机系统:Android
手机系统版本号:Android 13
手机厂商:小米
手机机型:小米13U
页面类型:vue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX
示例代码:
<template>
<view @tap="actionSheetTap">123</view>
</template>
<script>
export default {
methods: {
actionSheetTap() {
uni.showActionSheet({
title: "",
itemList: [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"40",
"41",
"42",
"43",
"44",
"45",
"46",
"47",
"48",
"49",
"50",
"51",
"52",
"53",
"54",
"55",
"56",
"57",
"58",
"59",
"60",
"61",
"62",
"63",
"64",
"65",
"66",
"67",
"68",
"69",
"70",
"71",
"72",
"73",
"74",
"75",
"76",
"77",
"78",
"79",
"80",
"81",
"82",
"83",
"84",
"85",
"86",
"87",
"88",
"89",
"90",
"91",
"92",
"93",
"94",
"95",
"96",
"97",
"98",
"99",
"100",
"101",
"102",
],
success: (e) => {
console.log("success");
},
fail: (e) => {
console.log("fail");
},
complete: (e) => {
console.log("complete");
},
});
},
},
};
</script>
操作步骤:
- 点击文本“123”,点击数字“100”
预期结果:
- 打印“success”、“complete”或打印“fail”、“complete”
实际结果:
- 什么都没有打印
bug描述:
uni.showActionSheet第100条在安卓无法选择,IOS第100条可以选择 点击第100条success、fail、complete方法均不执行
4 回复
确实有这个问题 你真牛啊 这种bug都能让你找出来 这么多的选择 用picker不行吗?
是有这问题。app可以显示多个,小程序最大是6个
在 uni-app
中使用 uni.showActionSheet
时,如果第100条在安卓设备上无法选择,这可能是由于安卓系统对 ActionSheet
的显示项数量有限制。通常情况下,安卓系统对 ActionSheet
的显示项数量有一个上限,超过这个上限后,后面的项可能无法显示或选择。
解决方案
-
分页显示:
- 将
ActionSheet
的选项分成多个页面显示。例如,每页显示20个选项,用户可以通过滑动或点击“下一页”按钮来查看更多选项。
- 将
-
使用自定义组件:
- 使用
uni-app
的自定义组件来实现一个类似ActionSheet
的功能,这样可以完全控制显示的内容和交互逻辑,不受系统限制。
- 使用
-
使用
Picker
组件:- 如果选项数量非常多,可以考虑使用
Picker
组件,它更适合处理大量选项的情况。
- 如果选项数量非常多,可以考虑使用
-
优化选项数量:
- 如果可能,尽量减少选项的数量,或者将选项进行分组,减少一次性显示的选项数量。
示例代码
以下是一个简单的分页显示 ActionSheet
的示例:
let items = []; // 假设这是你的100个选项
let pageSize = 20; // 每页显示20个选项
let currentPage = 0;
function showActionSheetPage(page) {
let start = page * pageSize;
let end = start + pageSize;
let pageItems = items.slice(start, end);
uni.showActionSheet({
itemList: pageItems,
success: (res) => {
let selectedIndex = res.tapIndex;
let selectedItem = pageItems[selectedIndex];
console.log('Selected:', selectedItem);
},
fail: (res) => {
console.log('ActionSheet failed:', res);
}
});
}
// 显示第一页
showActionSheetPage(currentPage);
// 下一页按钮点击事件
function nextPage() {
currentPage++;
if (currentPage * pageSize < items.length) {
showActionSheetPage(currentPage);
} else {
uni.showToast({
title: '没有更多选项了',
icon: 'none'
});
}
}