叶凌风
叶凌风
  • 发布:30 分钟前
  • 更新:29 分钟前
  • 阅读:14

UNIAPP x使用富文本编辑框插入图片的时候不能自动弹出高度

分类:uni-app x

插入图片的时候不能自动弹出高度,默认是裁剪的因为高度不够。

30 分钟前 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

根据您描述的问题,这通常是因为 uni-app x 的 editor 组件在 App 端不会自动根据内容(尤其是异步加载的图片)撑开高度,需要手动计算并设置高度。

结合知识库与 uni-app x 原生渲染特性,建议按以下方案处理:

1. 核心原因

  • editor 组件特性:在 App 端(Android/iOS/鸿蒙),editor 是原生渲染的富文本编辑器,不会自动撑开高度,需要显式指定或通过内容计算。
  • 图片异步加载:图片插入后,编辑器内容区域高度变化,但外层容器未同步更新,导致内容被裁剪。

2. 解决方案(推荐)

使用 @ready@input / @insert 事件 结合 getBoundingClientRect 动态计算高度,并手动设置 editor 容器的高度。

示例代码(.uvue 页面,蒸汽模式/VDOM 通用)

<template>  
  <view class="editor-container" :style="{ height: editorHeight + 'px' }">  
    <editor  
      id="my-editor"  
      class="editor"  
      :placeholder="'请输入内容'"  
      @ready="onEditorReady"  
      @input="onEditorInput"  
      @insert="onEditorInsert"  
    ></editor>  
  </view>  
</template>  

<script setup lang="uts">  
  const editorHeight = ref<number>(300) // 初始高度  

  // 编辑器准备就绪  
  const onEditorReady = () => {  
    console.log('编辑器已就绪')  
  }  

  // 输入或插入内容时,重新计算高度  
  const updateHeight = () => {  
    const editorElement = uni.getElementById('my-editor') as UniElement  
    if (editorElement != null) {  
      // 延迟等待 DOM 更新(特别是图片加载)  
      setTimeout(() => {  
        const rect = editorElement.getBoundingClientRect()  
        if (rect != null) {  
          // 设置一个最小高度,避免过小  
          editorHeight.value = Math.max(rect.height, 300)  
          console.log('编辑器高度更新为:', editorHeight.value)  
        }  
      }, 300)  
    }  
  }  

  const onEditorInput = (e: UniEditorInputEvent) => {  
    updateHeight()  
  }  

  const onEditorInsert = (e: UniEditorInsertEvent) => {  
    // 插入图片后,图片加载是异步的,需要更长的延迟  
    if (e.detail.insert != null && e.detail.insert.image != null) {  
      setTimeout(() => {  
        updateHeight()  
      }, 500) // 等待图片加载完成  
    } else {  
      updateHeight()  
    }  
  }  
</script>  

<style>  
.editor-container {  
  width: 100%;  
  border: 1px solid #e0e0e0;  
  border-radius: 8px;  
  overflow: hidden;  
}  
.editor {  
  width: 100%;  
  height: 100%;  
  padding: 12px;  
}  
</style>

本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码

3. 关键细节

  • 延迟计算:图片加载是异步的,setTimeout 确保在图片渲染完成后再测量高度。
  • 最小高度:建议保留 Math.max(rect.height, 300) 防止内容过少时高度塌陷。
  • 性能注意:如果内容非常多(如长文章),频繁测量高度可能影响性能,建议:
    • @input 中使用防抖(debounce)。
    • 或在 @insert 图片时单独处理,避免每次输入都触发。

4. 平台差异与注意事项

  • App 端(Android/iOS/鸿蒙):必须手动处理高度,因为原生 editor 不会自动撑开。
  • Web/小程序端:部分平台可能支持 auto-height,但 uni-app x 建议统一手动控制以保证一致性。
  • 蒸汽模式:上述代码在蒸汽模式下可直接使用(支持 JS/TS/UTS)。
  • VDOM 模式:同样适用,但注意 getBoundingClientRect 的调用时机。

5. 参考链接

如果以上方案仍无法解决,请检查:

  1. 是否在 pages.json 中正确注册了页面?
  2. 是否使用了 list-viewscroll-view 包裹编辑器?(嵌套滚动容器可能导致高度计算异常)
  3. 提供 HBuilderX 版本、目标平台(Android/iOS/鸿蒙)和运行模式(VDOM/蒸汽),以便进一步排查。
内容为 AI 生成,仅供参考

要回复问题请先登录注册