我想在iOS 7上更改状态栏的背景颜色,我正在使用此代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[UIApplication sharedApplication].statusBarHidden = NO;
self.window.clipsToBounds = YES;
[[UIApplication sharedApplication] setStatusBarStyle: UIStatusBarStyleLightContent];
self.window.frame = CGRectMake(0,20,self.window.frame.size.width,self.window.frame.size.height-20);
self.window.bounds = CGRectMake(0, 20, self.window.frame.size.width, self.window.frame.size.height);
...
...
}
当我写这个时,它会显示黑色背景的状态栏;我希望它有一个红色背景。
如何将状态栏的颜色更改为红色背景而不是黑色?
答案 0 :(得分:27)
在iOS 7中处理状态栏的背景颜色时,有两种情况
案例1:使用导航栏查看
在这种情况下,请在viewDidLoad方法中使用以下代码
UIApplication *app = [UIApplication sharedApplication];
CGFloat statusBarHeight = app.statusBarFrame.size.height;
UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
statusBarView.backgroundColor = [UIColor yellowColor];
[self.navigationController.navigationBar addSubview:statusBarView];
案例2:没有导航栏的视图
在这种情况下,请在viewDidLoad方法中使用以下代码
UIApplication *app = [UIApplication sharedApplication];
CGFloat statusBarHeight = app.statusBarFrame.size.height;
UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
statusBarView.backgroundColor = [UIColor yellowColor];
[self.view addSubview:statusBarView];
答案 1 :(得分:15)
在iOS 7及更高版本中,状态栏为透明。将视图的backgroundColor
设置为状态栏所需的颜色。
或者,您可以在视图顶部添加一个20px高的红色子视图。
有关详情,请参阅Apple Transition Guide。
另外,请确保preferredStatusBarStyle
为UIStatusBarStyleLightContent
。并在您的Info.plist中将“查看基于控制器的状态栏外观”设置为“否”。
答案 2 :(得分:8)
目标c
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[[UIApplication sharedApplication] setStatusBarHidden:false];
UIView *statusBar=[[UIApplication sharedApplication] valueForKey:@"statusBar"];
statusBar.backgroundColor = [UIColor redColor];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
return YES;
}
这对我有用。我希望这对你也有帮助。
答案 3 :(得分:5)
@Teja Kumar Bethina提供的内容很有帮助,但最好从UIApplication单例中获取statusBar的高度,如下所示:
UIApplication *app = [UIApplication sharedApplication];
UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -app.statusBarFrame.size.height, self.view.bounds.size.width, app.statusBarFrame.size.height)];
statusBarView.backgroundColor = [UIColor blackColor];
答案 4 :(得分:3)
在AppDelegate中使用
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
并在项目info.plist文件中
将标记NO设置为在应用程序中查看基于控制器的状态栏外观。
答案 5 :(得分:3)
使用状态栏颜色从ViewDidLoad调用此函数。
func setStatusBarBackgroundColor(color: UIColor)
{
guard let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView
else
{
return
}
statusBar.backgroundColor = color
}
希望它能提供帮助。
答案 6 :(得分:1)
这是一个使用自动布局的快速解决方案,如果您的应用程序是纵向或横向,则条形图的宽度将正确。它作为子视图添加到导航栏视图中,因此它偏移了-20。您可以将其添加到导航栏的父视图中,然后不需要偏移。此示例还将颜色设置为与导航栏相同。
希望有帮助:)
// Add colored opaque view behind the status bar view
let statusBarView = UIView()
statusBarView.backgroundColor = navigationBar.backgroundColor
statusBarView.translatesAutoresizingMaskIntoConstraints = false
navigationBar.addSubview(statusBarView)
let views = ["statusBarView": statusBarView]
let hConstraint = "H:|-0-[statusBarView]-0-|"
let vConstraint = "V:|-(-20)-[statusBarView(20)]"
var allConstraints = NSLayoutConstraint.constraintsWithVisualFormat(hConstraint,
options: [], metrics: nil, views: views)
allConstraints += NSLayoutConstraint.constraintsWithVisualFormat(vConstraint,
options: [], metrics: nil, views: views)
NSLayoutConstraint.activateConstraints(allConstraints)
答案 7 :(得分:-4)
如果您的应用程序是基于导航的,那么您可以将状态栏背景颜色设置为红色,如下所示:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[[UINavigationBar appearance] setBarTintColor:[UIColor redColor]];
可能会有所帮助。