设置UINavigationBar背景色后显示与指定UIColor不一致问题求助
这种颜色偏差的情况在iOS导航栏配置里挺常见的,大多是半透明特性和过时API在搞鬼,咱们一步步来排查修复:
1. 关闭导航栏半透明特性(最核心的原因)
iOS的UINavigationBar默认是半透明状态(translucent = YES),这时候设置的barTintColor会和底层视图颜色混合,导致显示出来的颜色比你设置的要浅或者偏色。必须强制关闭这个特性:
[[UINavigationBar appearance] setTranslucent:NO];
2. 替换过时的UIBarStyleBlackOpaque
UIBarStyleBlackOpaque在iOS 7之后就被废弃了,它的行为和新的导航栏样式逻辑不兼容,建议替换成UIBarStyleBlack,配合半透明关闭来实现不透明的深色导航栏:
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
3. 确保颜色初始化完全精确
先确认你定义的Default_blue_color是严格对应#142148的RGB值——十六进制转十进制是R=20, G=33, B=72,alpha=1。如果之前的颜色定义有误差,直接用下面的代码初始化更稳妥:
UIColor *Default_blue_color = [UIColor colorWithRed:20/255.0 green:33/255.0 blue:72/255.0 alpha:1.0];
4. 清空残留的自定义背景图片
如果之前给导航栏设置过背景图片,它会直接覆盖barTintColor的效果,所以要确保没有残留的背景配置:
[[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; [[UINavigationBar appearance] setShadowImage:nil];
完整修复代码示例
把这些调整整合起来,最终的配置代码应该是这样的:
// 初始化精确的目标颜色 UIColor *Default_blue_color = [UIColor colorWithRed:20/255.0 green:33/255.0 blue:72/255.0 alpha:1.0]; // 统一配置导航栏 [[UINavigationBar appearance] setBarTintColor:Default_blue_color]; [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]]; [[UINavigationBar appearance] setBarStyle:UIBarStyleBlack]; [[UINavigationBar appearance] setTranslucent:NO]; [[UINavigationBar appearance] setBackgroundImage:nil forBarMetrics:UIBarMetricsDefault]; [[UINavigationBar appearance] setShadowImage:nil];
额外排查点
如果还是有偏差,检查一下导航栏所在的UINavigationController是否有额外配置,比如是否开启了extendedLayoutIncludesOpaqueBars,或者视图控制器的edgesForExtendedLayout设置是否影响了导航栏的显示逻辑。
内容的提问来源于stack exchange,提问作者Shiv Pogra
相关产品推荐
相关产品推荐

