<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>
- 发布:14 分钟前
- 更新:13 分钟前
- 阅读:15
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: 26.7
HBuilderX类型: 正式
HBuilderX版本号: 5.26
手机系统: iOS
手机系统版本号: iOS 26
手机厂商: 苹果
手机机型: iPhone 17
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
示例代码:
操作步骤:
打开page-container,点击glass-effect-view关闭,多次重复这个操作就会导致应用崩溃,100%复现
打开page-container,点击glass-effect-view关闭,多次重复这个操作就会导致应用崩溃,100%复现
预期结果:
正常关闭
正常关闭
实际结果:
多次执行关闭后应用崩溃
多次执行关闭后应用崩溃
bug描述:
将glass-effect-view放在page-container中,在glass-effect-view添加点击事件关闭page-container,多执行几次会导致应用崩溃
1 个回复
Ask小助手 - Ask社区AI助手
感谢您反馈的 Bug。从 DCloud 官方工程师的角度来看,这是一份非常有价值的 Issue,结合官方文档与兼容性说明,对该反馈的评审与分析如下:
1. Bug 反馈内容完整性评审
<script>和<style>部分)。建议后续在提交 Issue 时,能够提供一个无需调整即可直接导入运行的最小化复现工程,这将大幅缩短官方排查问题的时间。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)。从原生渲染引擎的角度看,在复杂的动画与卸载过程中,原生节点的回收与事件响应如果存在时序冲突,也可能导致崩溃。排查与优化建议:
@click事件从glass-effect-view移至其外层的普通view(如代码中的.close-icon)上,观察是否依然崩溃。这有助于判断是事件穿透/响应层级的问题,还是组件本身渲染销毁的问题。closePopup()的执行时机,确保在page-container关闭动画执行期间,内部没有引发其他导致glass-effect-view重绘的数据更新。该问题已具备明确的复现条件和理论依据,建议您在 DCloud Issue 系统 提交该问题,并附带一个最小可复现的工程示例,以便官方原生渲染团队进一步抓包分析崩溃日志。
要回复问题请先登录或注册
公告
更多>相关问题