UINavigationBar背景颜色不是我设置的确切UIColor

özg*_*özg 35 iphone xcode objective-c ios

请看下面的截图.

我为UINavigationBar,底部的搜索栏和工具栏设置了相同UIColor对象的所有色调颜色.但由于某种原因,导航栏颜色略有不同.这可能是什么原因?

谢谢..

截图

Dan*_*Liu 65

导航栏和搜索栏之间的区别是因为导航栏是半透明的,系统将为导航栏应用默认的Alpha值.

尝试 self.navigationController.navigationBar.translucent = NO;


Bra*_*n A 30

UINavigationBar当涉及到你设置的颜色时,会有一些奇怪的行为.正如其他成员所指出的那样,您必须将translucent布尔值设置为false,但这并不是为了让您的栏与您尝试设置的颜色相匹配.它会很接近,但如果仔细观察,它将不是您尝试使用的确切颜色.为了设置真实的颜色,UINavigationBar你需要了解它在做什么.

让我们说我想把我的UINavigationBar颜色变成绿色.

在此输入图像描述

这将是RGB值:R = 90 | G = 200 | B = 95.

什么UINavigationBar都会做的是给这个绿色的"有光"看其应用的内置样式.对我们来说,结果是,它正在我们的绿色RGB值,并正在增加了20倍的每个.

在此输入图像描述

如果你仔细观察,上面的绿色方块UINavigationBar与使用相同RGB值显示的绿色方块不完全匹配.这看起来略显亮一点.

要解决这个问题,只需将RBG值减少20,即可打算用于UINavigationBar应用程序中的颜色.

所以R = 90 | G = 200 | B = 95将变为R = 70 | G = 180 | B = 75.

在此输入图像描述

  • 我喜欢这样一个事实:您解释了为什么会发生这种情况,并提供了可能的修复方法,而不仅仅是解决方法。 (2认同)
  • 布兰登,我想尝试这个解决方案,但在我的情况下原始预期R = 10,所以考虑到你的解决方案,我应该尝试什么价值? (2认同)

Har*_*aye 6

您将不得不禁用导航栏的半透明属性

您可以使用以下代码行来编程

self.navigationController?.navigationBar.isTranslucent = false 
Run Code Online (Sandbox Code Playgroud)

要么

只需取消选中情节提要中的“半透明”复选框,即可在UINavigationController的UINavigationBar属性中找到它

在此处输入图片说明


Kri*_*sky 5

它因默认的 UINavigationBar 模糊效果而不同。我可以建议使用您的颜色设置 2px 宽度的可拉伸背景图像。像这样的东西:

    UIImage *image = [UIImage imageNamed:@"yourBlueImage"];
    image = [image stretchableImageWithLeftCapWidth:image.size.width / 2.0f topCapHeight:0.0f];
    [yourNavBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];
Run Code Online (Sandbox Code Playgroud)

这就像一个技巧,因为当您设置自定义 backgroundImage 模糊效果将被禁用,您将获得准确的颜色。


Ada*_*son -35

我以前也遇到过同样的问题。完全关闭 Xcode,为我解决了这个问题。