DOMI_
DOMI_
  • 发布:14 分钟前
  • 更新:13 分钟前
  • 阅读:15

【报Bug】glass-effect-view放在page-container中加点击事件会崩溃

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 26.7

HBuilderX类型: 正式

HBuilderX版本号: 5.26

手机系统: iOS

手机系统版本号: iOS 26

手机厂商: 苹果

手机机型: iPhone 17

页面类型: vue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
<page-container ref="confirmRef" :show="modelValue" position="bottom" round :close-on-slide-down="true"  
 overlay-style="pointer-events: none;"  @click-overlay="maskClick" @afterleave="$emit('close')">  
        <view class="bottom-content" :style="{'height': '400px'}">  
            <view class="touch-view" v-if="useSlide">  
                <view class="touch-bar"></view>  
            </view>  
            <slot name="header">  
                <view class="header">  
                    <text class="bottom-title" v-if="title">{{ title }}</text>  
                    <view class="close-icon" @click="closePopup()">  
                        <glass-effect-view  
                            class="glass-panel"  
                            glass-style="clear"  
                            :interactive="true"  
                            tint-color="rgba(221,221,221,0.4)" >  
                            <uni-icons name="closeempty" size="20" :color="iconColor" ></uni-icons>  
                        </glass-effect-view>  
                                        </view>   

                </view>  
            </slot>  
            <view class="popup-container" :style="{'padding-bottom': deviceInfo.safeAreaInsetsBottom+'px'}">  
                <slot></slot>  
            </view>  
        </view>  
    </page-container>  

操作步骤:

打开page-container,点击glass-effect-view关闭,多次重复这个操作就会导致应用崩溃,100%复现

预期结果:

正常关闭

实际结果:

多次执行关闭后应用崩溃

bug描述:

将glass-effect-view放在page-container中,在glass-effect-view添加点击事件关闭page-container,多执行几次会导致应用崩溃

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

Ask小助手 - Ask社区AI助手

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

感谢您反馈的 Bug。从 DCloud 官方工程师的角度来看,这是一份非常有价值的 Issue,结合官方文档与兼容性说明,对该反馈的评审与分析如下:

1. Bug 反馈内容完整性评审

  • BUG 描述:描述清晰且精准。明确指出了“glass-effect-view 放在 page-container 中”、“添加点击事件关闭 page-container”以及“多执行几次导致应用崩溃”这三大核心要素,逻辑清楚,官方人员能够直观理解问题场景。
  • 代码示例:代码示例提供了核心的组件嵌套结构和相关属性配置,展示了复现问题的上下文。不过需要提醒的是,当前代码片段属于业务代码的一部分,并非一个可直接运行的最小完整工程(缺少 <script><style> 部分)。建议后续在提交 Issue 时,能够提供一个无需调整即可直接导入运行的最小化复现工程,这将大幅缩短官方排查问题的时间。
  • 复现步骤:非常明确。指出了“打开 -> 点击 glass-effect-view 关闭 -> 多次重复”的操作流程,并强调“100%复现”,这对于官方定位和验证问题非常有帮助。
  • 预期结果与实际结果:预期结果合理(正常关闭),实际结果符合崩溃 Bug 的表现,无误报迹象。
  • 分类信息:非常完整。涵盖了 Mac 开发环境、HBuilderX 正式版(5.26)、iOS 26 系统、iPhone 17 机型、Vue3 等关键版本信息,为排查问题提供了充足的依据。
  • 附件说明:提示您,我无法识别附件内容,如果有关键的报错日志或截图,请直接以文本形式提供。

2. Bug 是否成立及依据分析

结合官方知识库与文档,该 Bug 反馈成立且符合技术逻辑,主要基于以下几点分析:

1. 平台与版本兼容性边界匹配
根据 glass-effect-view 官方文档 说明,glass-effect-view 组件在 iOS 平台上,iOS 26 及以上使用系统液态玻璃效果,iOS 26 以下降级为系统毛玻璃效果。您反馈的环境为 iOS 26 和 iPhone 17,且代码中使用了 glass-style="clear":interactive="true" 以及 tint-color 属性,这些属性均依赖 iOS 26 的系统液态玻璃特性。您的环境完全符合该组件对系统版本的苛刻要求。

2. 渲染性能与 GPU 合成开销
官方文档在 Tips 中明确指出:“玻璃材质需要实时采样和合成背景内容。大量创建、重叠或在长列表中频繁复用玻璃组件可能增加 GPU 合成开销造成卡顿。”
在您的场景中,glass-effect-view 被放置在 page-container 内部,并且需要响应点击事件来关闭弹层。page-container 在执行打开和关闭动画时,本身就会引发频繁的布局重绘和帧渲染;而 glass-effect-view 的液态玻璃效果又需要实时对背景进行采样合成。两者叠加,且在“多次重复执行”的高频交互下,极易触发 iOS 原生渲染管线的工作负载飙升,导致 GPU 合成异常或主线程阻塞,最终引发 App 崩溃。

3. 组件事件机制与生命周期排查建议
在 uni-app x 中,page-container 的显隐通过 show 属性驱动,并伴随 @afterleave 等生命周期。您的代码中在 glass-effect-view 上绑定了点击事件(推测触发 closePopup() 修改 modelValue)。从原生渲染引擎的角度看,在复杂的动画与卸载过程中,原生节点的回收与事件响应如果存在时序冲突,也可能导致崩溃。

排查与优化建议:

  1. 分离点击事件:建议暂时将 @click 事件从 glass-effect-view 移至其外层的普通 view(如代码中的 .close-icon)上,观察是否依然崩溃。这有助于判断是事件穿透/响应层级的问题,还是组件本身渲染销毁的问题。
  2. 避免动画期重绘:检查 closePopup() 的执行时机,确保在 page-container 关闭动画执行期间,内部没有引发其他导致 glass-effect-view 重绘的数据更新。

该问题已具备明确的复现条件和理论依据,建议您在 DCloud Issue 系统 提交该问题,并附带一个最小可复现的工程示例,以便官方原生渲染团队进一步抓包分析崩溃日志。

内容为 AI 生成,仅供参考

要回复问题请先登录注册