uni-app 报 Bug uni.setNavigationBarColor 背景色透明渐变,刷新背景色不生效

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

uni-app 报 Bug uni.setNavigationBarColor 背景色透明渐变,刷新背景色不生效

示例代码:

onShow() {
    console.log(333)
    setTimeout(() => {
        uni.setNavigationBarColor({
            frontColor: '#ffffff',
            backgroundColor: "#cccccc",
            animation: {
                duration: 400,
                timingFunc: 'easeIn'
            }
        })
    }, 1500)
},

操作步骤:

  • 滚动底部,H5刷新,导航栏背景色就失效了

预期结果:

  • 应该是滚动到特定位置,导航栏的实际颜色

实际结果:

  • 导航栏背景色失效

bug描述:

相关链接 :



| 信息类别       | 信息内容          |
|----------------|-------------------|
| 产品分类       | uniapp/App        |
| PC开发环境     | Mac               |
| PC版本号       | 11.5.2            |
| HBuilderX类型  | 正式              |
| HBuilderX版本  | 3.3.13            |
| 手机系统       | Android           |
| 手机系统版本   | Android 10        |
| 手机厂商       | vivo              |
| 手机机型       | android           |
| 页面类型       | vue               |
| vue版本        | vue2              |
| 打包方式       | 云端              |
| 项目创建方式   | HBuilderX         |

11 回复

已记录此问题后续优化,已加分,感谢您的反馈!


希望 H5 这边也优化一下,目前必须在延迟的时间下滑才能看到背景色,如果进入页面立即下滑,就不显示背景色了,但是标题显示出来了

回复 夏武依依: 如果需要在页面进入时设置标题,可以在onReady内执行,以避免被框架内的修改所覆盖

回复 DCloud_UNI_Anne: 但是是要根据接口返回的颜色,进行渲染的

回复 夏武依依: 调整下延迟时间呢

回复 DCloud_UNI_Anne: 调整过了,但是延迟太短了,又不显示了

回复 夏武依依: 回复 DCloud_UNI_Anne: 调整了一下时间可以了,感谢,

回复 夏武依依: 回复 DCloud_UNI_Anne: 解决刷新问题就好

回复 DCloud_UNI_Anne: H5还是不行,app是没有问题的,就是H5

回复 夏武依依: 回复 DCloud_UNI_Anne: 时间太短,就被覆盖掉了

在使用 uni.setNavigationBarColor 设置导航栏背景色时,如果你希望实现背景色透明渐变效果,可能会遇到刷新后背景色不生效的问题。这通常是因为导航栏的背景色设置在某些情况下被重置或覆盖了。

以下是一些可能的原因和解决方案:

1. 页面生命周期问题

uni.setNavigationBarColor 是在页面生命周期中调用的,如果你在 onLoadonShow 中设置了背景色,但在页面刷新或重新进入时没有重新调用该方法,可能会导致背景色不生效。

解决方案: 确保在 onShow 生命周期中调用 uni.setNavigationBarColor,以便每次页面显示时都会重新设置背景色。

export default {
  onShow() {
    uni.setNavigationBarColor({
      frontColor: '#ffffff', // 前景色
      backgroundColor: '#00000000', // 背景色,使用 rgba 透明色
      animation: {
        duration: 400,
        timingFunc: 'easeIn'
      }
    });
  }
};

2. 背景色设置问题

如果你设置的背景色是透明的(例如 #00000000),在某些情况下,系统可能会默认使用其他颜色覆盖。

解决方案: 确保背景色的格式正确,并且使用 rgba 格式来设置透明背景。

uni.setNavigationBarColor({
  frontColor: '#ffffff', // 前景色
  backgroundColor: 'rgba(0, 0, 0, 0)', // 背景色,使用 rgba 透明色
  animation: {
    duration: 400,
    timingFunc: 'easeIn'
  }
});

3. 平台差异

不同平台(如微信小程序、H5、App)对 uni.setNavigationBarColor 的支持程度和表现可能有所不同。

解决方案: 检查你使用的平台是否支持透明背景色。如果平台不支持,可能需要使用其他方式来实现类似效果。

4. 缓存问题

在某些情况下,导航栏的背景色可能会被缓存,导致刷新后不生效。

解决方案: 尝试清除缓存或重新编译项目,看看问题是否解决。

5. 使用 uni.setNavigationBarTitleuni.setNavigationBarColor 结合

如果你在设置背景色的同时还需要设置标题,确保两个方法都正确调用。

uni.setNavigationBarTitle({
  title: '我的页面'
});

uni.setNavigationBarColor({
  frontColor: '#ffffff', // 前景色
  backgroundColor: 'rgba(0, 0, 0, 0)', // 背景色,使用 rgba 透明色
  animation: {
    duration: 400,
    timingFunc: 'easeIn'
  }
});

6. 检查代码逻辑

确保你的代码逻辑没有问题,没有其他地方覆盖了导航栏的背景色设置。

解决方案: 仔细检查代码,确保 uni.setNavigationBarColor 在正确的地方调用。

7. 使用原生方式

如果以上方法都无法解决问题,可以考虑使用原生方式来设置导航栏背景色。

解决方案: 对于不同平台,使用原生 API 来设置导航栏背景色。例如,在微信小程序中可以使用 wx.setNavigationBarColor

wx.setNavigationBarColor({
  frontColor: '#ffffff',
  backgroundColor: '#00000000',
  animation: {
    duration: 400,
    timingFunc: 'easeIn'
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!