通过iOS 7更改状态栏背景颜色

时间:2014-01-17 07:27:45

标签: ios cocoa-touch uistatusbar

我想在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);

        ...
        ...


}

当我写这个时,它会显示黑色背景的状态栏;我希望它有一个红色背景。

如何将状态栏的颜色更改为红色背景而不是黑色?

8 个答案:

答案 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

另外,请确保preferredStatusBarStyleUIStatusBarStyleLightContent。并在您的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]];

可能会有所帮助。