我知道如何通过这样做来更改导航栏(和状态栏)的颜色:
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
但是当我隐藏导航栏时,状态栏颜色恢复为透明颜色。
即使隐藏导航栏,如何保持状态栏颜色与 barTintColor 相同?
我知道如何通过这样做来更改导航栏(和状态栏)的颜色:
self.navigationController.navigationBar.barTintColor = [UIColor redColor];
但是当我隐藏导航栏时,状态栏颜色恢复为透明颜色。
即使隐藏导航栏,如何保持状态栏颜色与 barTintColor 相同?
您只需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];
瞧
这对我有用(在 Swift 中):
let statusBarBGView = UIView(frame: UIApplication.sharedApplication().statusBarFrame)
statusBarBGView.backgroundColor = .whiteColor() //color of your choice
view.addSubview(statusBarBGView)
我的问题是我将导航栏设置为隐藏,这使得状态栏的背景清晰。这导致我的 tableView 单元格在滚动时显示在 statusBar 后面。
在状态栏下添加一个UIView
并将其backgroundColor
属性设置为导航栏barTintColor
我的解决方案是简单地设置视图控制器视图的背景颜色。例如
[self.view setBackgroundColor:[UIColor blackColor]];
当操作系统选择不显示状态栏时,需要处理添加视图。
设置self.tableView.contentInset = UIEdgeInsetsZero
后self.navigationController?.navigationBarHidden = true
这解决了我的问题:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}