5

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

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

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

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

4

7 回答 7

6

您只需UIView使用正确的 statusBar 测量值将 a 添加到当前视图,然后更改颜色。

这是一些示例代码。首先获取状态栏的框架:

 //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://stackoverflow.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];

于 2014-01-14T07:37:51.510 回答
6

这对我有用(在 Swift 中):

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

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

于 2016-04-14T03:54:52.043 回答
2

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

于 2014-01-14T07:21:17.410 回答
2

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

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

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

于 2016-11-28T15:46:59.940 回答
1

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

[之前[1]

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

选项

然后它工作

之后##标题##

于 2015-12-13T06:10:22.553 回答
0

设置self.tableView.contentInset = UIEdgeInsetsZeroself.navigationController?.navigationBarHidden = true

于 2015-10-06T13:59:19.717 回答
0

这解决了我的问题:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}
于 2019-04-09T23:56:13.613 回答