uni-app 报 Bug uni.setNavigationBarColor 背景色透明渐变,刷新背景色不生效
uni-app 报 Bug uni.setNavigationBarColor 背景色透明渐变,刷新背景色不生效
示例代码:
onShow() {
console.log(333)
setTimeout(() => {
uni.setNavigationBarColor({
frontColor: '#ffffff',
backgroundColor: "#cccccc",
animation: {
duration: 400,
timingFunc: 'easeIn'
}
})
}, 1500)
},
操作步骤:
- 滚动底部,H5刷新,导航栏背景色就失效了
预期结果:
- 应该是滚动到特定位置,导航栏的实际颜色
实际结果:
- 导航栏背景色失效
bug描述:
- 透明渐变样式,正常滚动没有问题,但是滚动到某个位置,刷新,导航栏背景色就失效了,官方给的demo ,也存在这样的问题:https://hellouniapp.dcloud.net.cn/pages/template/nav-transparent/nav-transparent
相关链接 :
| 信息类别 | 信息内容 |
|----------------|-------------------|
| 产品分类 | uniapp/App |
| PC开发环境 | Mac |
| PC版本号 | 11.5.2 |
| HBuilderX类型 | 正式 |
| HBuilderX版本 | 3.3.13 |
| 手机系统 | Android |
| 手机系统版本 | Android 10 |
| 手机厂商 | vivo |
| 手机机型 | android |
| 页面类型 | vue |
| vue版本 | vue2 |
| 打包方式 | 云端 |
| 项目创建方式 | HBuilderX |
已记录此问题后续优化,已加分,感谢您的反馈!
希望 H5 这边也优化一下,目前必须在延迟的时间下滑才能看到背景色,如果进入页面立即下滑,就不显示背景色了,但是标题显示出来了
回复 夏武依依: 如果需要在页面进入时设置标题,可以在onReady内执行,以避免被框架内的修改所覆盖
回复 DCloud_UNI_Anne: 但是是要根据接口返回的颜色,进行渲染的
回复 夏武依依: 调整下延迟时间呢
回复 DCloud_UNI_Anne: 调整过了,但是延迟太短了,又不显示了
回复 夏武依依: 回复 DCloud_UNI_Anne: 调整了一下时间可以了,感谢,
回复 夏武依依: 回复 DCloud_UNI_Anne: 解决刷新问题就好
回复 夏武依依: 回复 DCloud_UNI_Anne: 时间太短,就被覆盖掉了
在使用 uni.setNavigationBarColor
设置导航栏背景色时,如果你希望实现背景色透明渐变效果,可能会遇到刷新后背景色不生效的问题。这通常是因为导航栏的背景色设置在某些情况下被重置或覆盖了。
以下是一些可能的原因和解决方案:
1. 页面生命周期问题
uni.setNavigationBarColor
是在页面生命周期中调用的,如果你在 onLoad
或 onShow
中设置了背景色,但在页面刷新或重新进入时没有重新调用该方法,可能会导致背景色不生效。
解决方案:
确保在 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.setNavigationBarTitle
和 uni.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'
}
});