uni-app editor组件有序和无序列表功能在ios设备上手机光标出现在序号最前面

发布于 1周前 作者 caililin 来自 Uni-App

uni-app editor组件有序和无序列表功能在ios设备上手机光标出现在序号最前面

操作步骤

  1. 压缩 editor-defect.zip 文件,开发工具运行到苹果手机;
  2. 运行到手机后直接打开运行的app;
  3. 直接点击富文本的功能菜单:有序或者无序菜单
    (如果先点击了其他菜单,再点击有序或者无序菜单,光标位置才会正确)

预期结果

初次点击有序或者无序菜单,光标位置正确

实际结果

初次点击有序或者无序菜单,光标位置不正确

bug描述

uni-app这,editor组件有序和无序列表功能异常,iOS设备手机光标在序号的最前面。应该在序号的后面才对。请看附件图片光标的位置或者附件 editor-defect 复现demo。官方的 hello-uniapp-x 项目中 editor 组件也有一样的问题。

光标位置

开发环境与版本信息

信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win11
HBuilderX类型 正式
HBuilderX版本号 4.36
手机系统 iOS
手机系统版本号 iOS 18
手机厂商 苹果
手机机型 任意苹果手机均可
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

2 回复

editor组件聚焦时, ios设备上光标会穿透。 场景:有个view采用了position: fixed,bottom设置的值就是键盘的高度。就是这个view被固定在键盘之上,此时ios设备editor那个光标会覆盖在这个view之上,希望作者可以一起看一下这个问题,谢谢


在uni-app中,使用editor组件时,如果在iOS设备上遇到有序列表和无序列表功能的光标出现在序号或项目符号最前面的问题,这通常是由于编辑器组件的渲染和焦点管理在iOS上的特定行为导致的。虽然无法直接修改uni-app或iOS系统底层的行为,但可以通过一些技巧和自定义样式来尽量改善用户体验。

以下是一个可能的解决方案,通过自定义列表样式,并在列表项前后添加不可见的占位符字符,来尝试调整光标的位置。请注意,这种方法并不能完全解决所有情况,但它提供了一种思路。

自定义样式和占位符

  1. 自定义列表样式:在CSS中,为有序列表和无序列表定义自定义样式,确保列表项在视觉上正确显示。
/* 在你的全局或组件样式中 */
ol, ul {
  padding-left: 20px; /* 根据需要调整 */
}

li {
  position: relative;
  padding-left: 20px; /* 与列表符号宽度相匹配 */
}

/* 对于有序列表,添加自定义计数器样式 */
ol {
  counter-reset: item;
}

ol li {
  display: block;
  counter-increment: item;
  margin-bottom: 1em;
}

ol li::before {
  content: counters(item, ".") " ";
  position: absolute;
  left: -20px; /* 与padding-left相反 */
}
  1. 添加占位符字符:在列表项内容的前后添加不可见的占位符(如零宽空格\u200B),这有时可以帮助调整光标的位置。
// 示例:在editor组件的输入内容中添加占位符
const editorContent = `
<ul>
  <li>\u200B第一项内容\u200B</li>
  <li>\u200B第二项内容\u200B</li>
</ul>
`;

// 在uni-app的editor组件中设置内容
this.$refs.myEditor.setContent(editorContent);

注意事项

  • 兼容性:不同版本的iOS和uni-app可能有不同的表现,因此上述方法可能需要根据实际情况进行调整。
  • 性能:添加大量占位符可能会影响编辑器的性能,特别是在长文档中。
  • 用户体验:虽然这种方法可以在一定程度上改善光标位置,但可能无法完全消除所有问题。在最终用户测试中,应仔细检查各种情况。

总之,虽然无法直接解决uni-app editor组件在iOS上的光标位置问题,但通过自定义样式和占位符,可以尝试减轻其对用户体验的影响。

回到顶部