iOS 7隐藏导航栏时如何更改状态栏的颜色?

Posted

技术标签:

【中文标题】iOS 7隐藏导航栏时如何更改状态栏的颜色?【英文标题】:How do I change the colour of the status bar when the navigation bar is hidden in iOS 7? 【发布时间】:2014-02-02 04:13:17 【问题描述】:

我知道如何通过这样做来更改导航栏(和状态栏)的颜色:

self.navigationController.navigationBar.barTintColor = [UIColor redColor];

但是当我隐藏导航栏时,状态栏颜色恢复为透明颜色。

即使隐藏导航栏,如何保持状态栏颜色与 barTintColor 相同?

【问题讨论】:

在其后面添加一个具有相同色调的子视图 可能有助于了解状态栏始终是透明的。在它后面放一个UIView 与在它后面放一个UINavigationBar 没有什么不同。 @nhgrif 是的,这是真的,但状态栏是 320 x 20,与导航栏的尺寸不同。 【参考方案1】:

这对我有用(在 Swift 中):

let statusBarBGView = UIView(frame: UIApplication.sharedApplication().statusBarFrame)
statusBarBGView.backgroundColor = .whiteColor() //color of your choice
view.addSubview(statusBarBGView)

我的问题是我将导航栏设置为隐藏,这使得状态栏的背景变得清晰。这导致我的 tableView 单元格在滚动时显示在 statusBar 后面。

【讨论】:

【参考方案2】:

您只需将UIView 添加到具有正确状态栏测量值的当前视图,然后更改颜色。

这里有一些示例代码。 先获取状态栏的frame:

 //The statusBarFrame returns the frame in screen coordinates. I believe the correct way to get what this corresponds to in view coordinates is to do the following:
- (CGRect)statusBarFrameViewRect:(UIView*)view 

    CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
    CGRect statusBarWindowRect = [view.window convertRect:statusBarFrame fromWindow: nil];
    CGRect statusBarViewRect = [view convertRect:statusBarWindowRect fromView: nil];
    return statusBarViewRect;

//source: http://***.com/questions/3888517/get-iphone-status-bar-height

然后在 viewDidload 方法中或在您隐藏导航栏时使用以下代码创建您的视图:

UIView *statusBarUnderLay = [[UIView alloc] initWithFrame:[self statusBarFrameViewRect:self.view]];
[statusBarUnderLay setBackgroundColor:[UIColor yellowColor]];
[self.view addSubview:statusBarUnderLay];

然后瞧

【讨论】:

你们想看这个的快速版本吗?还是代码足够简单可以转换?【参考方案3】:

在状态栏下方添加UIView,并将其backgroundColor属性设置为导航栏barTintColor

【讨论】:

【参考方案4】:

我的解决方案是简单地设置视图控制器视图的背景颜色。例如

[self.view setBackgroundColor:[UIColor blackColor]];

当操作系统选择不显示状态栏时,需要处理添加视图。

【讨论】:

【参考方案5】:

我找到了一种使用 InterfaceBuilder 解决问题的简单方法。 我的问题是这样的,隐藏导航栏后有一个恼人的白色间隙。

[

然后我取消选中这两个选项

然后就可以了

【讨论】:

【参考方案6】:

self.navigationController?.navigationBarHidden = true之后设置self.tableView.contentInset = UIEdgeInsetsZero

【讨论】:

【参考方案7】:

这解决了我的问题:

- (UIStatusBarStyle)preferredStatusBarStyle

    return UIStatusBarStyleLightContent;

【讨论】:

以上是关于iOS 7隐藏导航栏时如何更改状态栏的颜色?的主要内容,如果未能解决你的问题,请参考以下文章

隐藏导航栏时的假状态栏颜色

iOS hidesBarsOnSwipe 状态栏背景颜色

更改状态栏色调颜色

ios 7状态栏不继承导航栏颜色

在iOS 7中隐藏状态栏时防止UINavigationController调整原点

iOS 7 中 UIActivityViewControllers 的模态状态栏和导航栏文本颜色