我知道如何通过这样做来改变导航栏(和状态栏)的颜色:
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
但是当我隐藏导航栏时,状态栏颜色会恢复为透明色。
即使导航栏被隐藏,如何使状态栏颜色与barTintColor保持一致?
答案 0 :(得分:6)
您只需使用正确的statusBar测量值向当前视图添加UIView
,然后更改颜色。
这是一些示例代码。 首先获取状态栏的框架:
//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 yellow]];
[self.view addSubview:statusBarUnderLay];
和瞧
答案 1 :(得分:2)
在状态栏下添加UIView
,并将其backgroundColor
属性设置为导航栏barTintColor
答案 2 :(得分:2)
这对我来说很有用(在Swift中):
let statusBarBGView = UIView(frame: UIApplication.sharedApplication().statusBarFrame)
statusBarBGView.backgroundColor = .whiteColor() //color of your choice
view.addSubview(statusBarBGView)
我的问题是我将navigationBar设置为隐藏,这使得statusBar的背景变得清晰。这导致我的tableView单元格在滚动时显示在statusBar后面。
答案 3 :(得分:2)
我的解决方案很简单,就是设置viewcontrollers视图的背景颜色。 e.g。
[self.view setBackgroundColor:[UIColor blackColor]];
当操作系统选择不显示状态栏时,需要处理添加视图。
答案 4 :(得分:1)
答案 5 :(得分:0)
在self.tableView.contentInset = UIEdgeInsetsZero
self.navigationController?.navigationBarHidden = true
答案 6 :(得分:0)
这解决了我的问题:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}