为啥ios中的状态栏和导航栏背景颜色不同

Posted

技术标签:

【中文标题】为啥ios中的状态栏和导航栏背景颜色不同【英文标题】:why Status bar and Navigation bar background colors are different in ios为什么ios中的状态栏和导航栏背景颜色不同 【发布时间】:2014-08-14 14:54:06 【问题描述】:

我想更改状态栏的背景颜色,并且该背景颜色应与导航栏背景颜色相同,即深灰色。我的问题是使用下面的代码为状态栏和导航栏提供相同的颜色后,我得到了不同的颜色。我已经将 UIViewControllerBasedStatusBarAppearance 设置为 NO。请建议我在哪里做错了,我附上了下面的图片供您参考。

这是我的 App 委托代码 - didFinishLaunchingWithOptions:

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    //For changing status bar background color

    self.window.backgroundColor = [UIColor darkGrayColor];

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
    [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];

    //For changing navigation bar background color

    [[UINavigationBar appearance] setBackgroundColor:[UIColor darkGrayColor]];
    [[UINavigationBar appearance] setTintColor:[UIColor darkGrayColor]];

【问题讨论】:

UIStatusBarStyleLightContent[UIColor darkGrayColor] 一样吗? sry.. 我附上截图供您参考。 【参考方案1】:

它们有不同颜色的原因是因为UIStatusBarStyleLightContent[UIColor darkGrayColor] 的颜色不同。


如果按照状态栏的样子调整导航栏颜色就可以了,那么你可以设置状态栏颜色:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

找出状态栏的 RGB 值。 (比如我用的是DigitalColor Meter,它说它有R:28, G: 28, B: 28)。

然后你可以这样做:

[[UINavigationBar appearance] setBackgroundColor:[UIColor colorWithRed:28/255.0 green:28/255.0 blue:28/255.0 alpha:1.0f]];

您可能需要将半透明设置为NO

如果您只想在某些屏幕上使用它,可以将其添加到 viewDidLoad 方法中:

[self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:28/255.0 green:28/255.0 blue:28/255.0 alpha:1.0f]];

【讨论】:

感谢@Lord Zsolt,我已经对我的代码进行了更改。现在我得到了类似bg颜色的东西。你能告诉我是否需要将 bg 颜色设置为 [UIColor colorWithRed:(51/255.0) green:(51/255.0) blue:(51/255.0) alpha:1.0]];那么 UINavigationBar 的 bg 和 tint 颜色应该是什么? 这就是我所说的“如果可以根据状态栏设置导航栏颜色”。状态栏有一些预设颜色,之后你必须调整导航栏,反之则不然。 okey..现在我的状态栏和导航栏都使用相同的背景颜色,但我不知道为什么我在状态栏和导航栏之间有一条黑色的小分隔线。请检查我更新的问题(我已附上屏幕截图)。请建议我..谢谢 @YogeshSuthar感谢您的回答..我已经尝试过,但它仅适用于黑色背景色,不适用于任何其他颜色。 @AnandGautam 删除所有用于设置 statusBarBGColor 和 navigationcontroller BG 颜色的代码,然后尝试我的代码。我刚刚检查了 yellowColor,它工作正常。【参考方案2】:

首先在你的 VC 的 viewDidLoad 方法中更改 statusBar 样式

self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

然后在 VC 的 viewDidLoad 方法中将 BarTintColor 更改为您想要的颜色

[self.navigationController.navigationBar setBarTintColor:[UIColor blackColor]];

【讨论】:

【参考方案3】:

在您的 AppDelegate 的“didFinishLaunchingWithOptions:”中添加以下内容,它应该可以工作。

[[UINavigationBar appearance] setBarTintColor:[UIColor darkGrayColor]];

【讨论】:

以上是关于为啥ios中的状态栏和导航栏背景颜色不同的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 7 上更改状态栏背景颜色和文本颜色?

如何在iOS 7上更改状态栏背景颜色和文本颜色? Warif Akhand Rishi

iOS13状态栏背景颜色与大文本模式下的导航栏不同

android导航栏与状态栏颜色及透明度

xcode 4.2 和 ios 5 中的标签栏背景颜色

导航栏和状态栏颜色/不可见的 iOS