IOS 状态栏statusBar的背景颜色

一、无导航条的情况:

系统默认状态栏的字体颜色为黑色,即UIStatusBarStyle=UIStatusBarStyleDefault,同时背景颜色和self.view.backgroundColor颜色一致,如下图所示:

假如我想让状态栏颜色设置成红色,字体仍为黑色,可以在需要显示的那一页进行如下设置:(最好写在viewWillAppear里面)

//设置状态栏颜色

- (void)setStatusBarBackgroundColor:(UIColor*)color {


UIView*statusBar = [[[UIApplication   sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

if([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {

        statusBar.backgroundColor = color;

    }

}

- (void)viewDidLoad {

 [superviewDidLoad];

[self  setStatusBarBackgroundColor:[UIColor  redColor]];

self.view.backgroundColor = [UIColor   yellowColor];

}


假如此时我想让状态栏文字颜色变成白色,可以这样操作:

在上面代码的基础上再添加下面一段代码:

- (UIStatusBarStyle)preferredStatusBarStyle{

return   UIStatusBarStyleLightContent;

}


问题来了,当你在这一页点击按钮进入下一页后,状态栏背景颜色不变,还是红色,而字体颜色却变成黑色了,比较闹心!可以通过下面的方法随心所欲的在任意一页修改状态栏的字体颜色(字体颜色只有白色和黑色)和背景颜色(直接复制到项目中即可)

//设置字体颜色

- (UIStatusBarStyle)preferredStatusBarStyle{

return   UIStatusBarStyleLightContent;//白色

}

//设置状态栏颜色

- (void)setStatusBarBackgroundColor:(UIColor*)color {

UIView*statusBar = [[[UIApplication   sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

if([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {

        statusBar.backgroundColor = color;

    }

}

//!!!重点在viewWillAppear方法里调用下面两个方法

-(void)viewWillAppear:(BOOL)animated{

[self   preferredStatusBarStyle];

[self   setStatusBarBackgroundColor:[UIColorredColor]];

}

- (void)viewDidLoad {

[superviewDidLoad];

self.view.backgroundColor = [UIColor  yellowColor];

  }

下面的效果是第一页要红底白字,第二页要绿底黑字,返回后也是正常显示


二、有导航条的情况

当我在上面的基础上添加了导航条后,会发现字体颜色由之前的白色变成黑色了,背景颜色倒没有发生变化

不用担心,可以通过下面的方法完美解决:

//设置状态栏颜色

- (void)setStatusBarBackgroundColor:(UIColor*)color {


UIView*statusBar = [[[UIApplication   sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

if([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {

        statusBar.backgroundColor = color;

    }

}

-(void)viewWillAppear:(BOOL)animated{

[self   setStatusBarBackgroundColor:[UIColorred Color]];

[UIApplication  sharedApplication].statusBarStyle=UIStatusBarStyleLightContent;

}

!!!同时别忘了在info plist里面将View controller-based status bar appearance设置成NO,(默认是YES)

现在基本的设备都适配ios7以上设备,默认的状态栏字体颜色是黑色

[UIApplication   sharedApplication].statusBarStyle=UIStatusBarStyleDefault;

现在基本的设备都适配ios7以上设备,默认的状态栏字体颜色是黑色

[UIApplication   sharedApplication].statusBarStyle=UIStatusBarStyleLightContent;

你可能感兴趣的:(IOS 状态栏statusBar的背景颜色)