uni-app nvue 鸿蒙系统显示问题:上一页面内容有时会突然变白,滑动后又出现

uni-app nvue 鸿蒙系统显示问题:上一页面内容有时会突然变白,滑动后又出现

测试过的手机:

鸿蒙系统 华为手机mate30pro 华为手机mate20

操作步骤:

随便一个子页面都会显示上一级页面的内容

预期结果:

不会显示上一级页面内容当前页面背景色生效

实际结果:

显示上一级页面内容当前页面背景色不生效

bug描述:

nvue 鸿蒙系统 显示上一页内容 当前页面设置背景不管用 还有列表item中的文字有时候会空白 然后有时候文字会闪烁一下出现一下不出现 部分页面可以通过增加背景解决渲染出上级内容的问题,但部分页面无法解决。

https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20210929/f546c81531f1ba959ad23abbd233da0b.jpg

https://www.itying.com/uniimg.php?url=https://img-cdn-tc.dcloud.net.cn/uploads/questions/20210929/76821ea2f3ec76544888cc1222fd86f4.jpg


更多关于uni-app nvue 鸿蒙系统显示问题:上一页面内容有时会突然变白,滑动后又出现的实战教程也可以访问 https://www.itying.com/category-93-b0.html

11 回复

猜测可能是box-shadow引起的 你可以过下代码去掉看看。 参考链接:https://uniapp.dcloud.io/nvue-css?id=android-box-shadow

更多关于uni-app nvue 鸿蒙系统显示问题:上一页面内容有时会突然变白,滑动后又出现的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


不会 我就没用box-shandow这个属性

回复 2***@qq.com: 我看截图上有阴影以为用了

鸿蒙系统的话是大概率会显示上一级页面的 其他的手机试了一下不会 设置了背景色后 页不能遮住上一页的部分内容渲染 尤其是这种整体一个色的 页面中的子view多的情况 比如列表之类的 列表的item背景色可以挡住 但是item之间的空隙中还是会有上一页内容的显示 然后页面内容闪烁情况是在 反复的浏览了几个页面后会出现 这边页面都是用nvue写的

回复 DCloud_Android_ST:只是上面铺了一层半透明的黑色

回复 2***@qq.com: 去掉部分圆角化配置 试试

请问楼主解决这个问题了吗

请提供demo示例

楼主请问这个问题解决了吗?

请提供demo示例

这是一个在鸿蒙系统上使用uni-app nvue时可能遇到的渲染问题,主要与页面栈管理和渲染层优化有关。问题核心在于页面切换时,旧页面的渲染内容未能被及时、正确地清理,导致与新页面内容发生重叠或干扰。

可能的原因和针对性解决方案:

  1. 页面背景色覆盖不彻底:这是最常见的原因。在鸿蒙系统上,nvue页面的默认背景可能是透明的。当新页面渲染稍慢时,底层可能透出上一个页面的内容。

    • 解决方案:确保每个nvue页面的根节点(通常是<template>下的第一个容器,如<view>)都显式设置了background-color样式。不要依赖全局样式或页面级的style,直接在根节点上写 style="background-color:#ffffff;"。对于列表项(<cell><view>)内部的文字空白问题,同样需要确保这些列表项容器本身具有不透明的背景色。
  2. 页面切换动画与渲染时序问题:鸿蒙系统的页面切换动画可能与uni-app nvue的渲染生命周期存在细微的时序冲突。

    • 解决方案:尝试在进入新页面时,短暂延迟关键内容的渲染。可以在页面的onLoadonReady生命周期中,使用一个极短的setTimeout(例如10ms)来触发一个标志位,控制主要内容区域的显示(v-if)。这可以确保页面切换动画基本完成后再进行主要内容渲染,避免冲突。
    • 示例代码片段:
      // 在script中
      data() {
          return {
              isContentReady: false
          }
      },
      onReady() {
          setTimeout(() => {
              this.isContentReady = true;
          }, 10);
      }
      
      <!-- 在template中 -->
      <view v-if="isContentReady">
          <!-- 你的页面主要内容 -->
      </view>
回到顶部