(关于修改顶部状态栏背景以及前景色)
首先,在看文章之前首先要知道 View controller-based status bar appearance
这么一个key,在info.plist中进行配置
iPhone的状态栏分为前景和背景,前景部分指的是显示电池, 时间等部分; 背景部分指的是白色(图bg1)或者黑色(图bg2)的背景部分
修改前景色
- 如果
View controller-based status bar appearance
设置为YES, 那么控制器对status bar
的设置优先级高于application
的设置 ,可以在控制器中通过以下代码进行修改:
- (void)viewDidLoad {
[super viewDidLoad];
[self preferredStatusBarStyle];
//通过改背景色修改状态栏的字体(信号,时间,电池)的颜色
self.view.backgroundColor = [UIColor blackColor];
}
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
默认的状态栏的StatusBarStyle
为UIStatusBarStyleDefault
,也就是黑色;相反的,如果状态栏的StatusBarStyle
为UIStatusBarStyleLightContent
,那就是亮色.如果修改StatusBarStyle
这个属性,要记得修改背景色不与该颜色相同.否则视图上将看不见状态栏的字体.
2.如果 View controller-based status bar appearance
设置为NO,那么application
的设置优先级最高. 可以在AppDelegate.m
的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
方法里添加如下代码:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
如果只是在某个页面修改状态栏, 其他页面不修改, 就需要在相应控制器的- (void)viewWillAppear:(BOOL)animated
方法里添加, 并且在- (void)viewWillDisappear:(BOOL)animated
恢复默认的风格, 代码如下:
- (void)viewWillAppear:(BOOL)animated {
//view出现的时候状态栏前景颜色改为亮色
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
- (void)viewWillDisappear:(BOOL)animated{
//view消失的时候状态栏前景颜色改为默认/黑色
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}
同上, 要记得修改状态栏背景色不与该颜色相同.否则视图上将看不见状态栏的字体.
修改背景色
1.当View controller-based status bar appearance
设置为YES,控制器才有权限对status的属性进行修改.
2.iOS的状态栏背景色默认是透明的.
在没有导航栏的时候可以自定义一个黑色的,高度为20的View添加到状态栏的位置,代码如下:
UIView *topView = [[UIView alloc] init];
topView.backgroundColor = [UIColor blackColor];
[self.view addSubview:topView];
[topView mas_updateConstraints:^(MASConstraintMaker *make) {
make.top.left.right.equalTo(self.view);
make.height.mas_offset(20);
}];
而且, 前景色会随着背景改变而改变, 无需再次设置.
当有导航栏的时候就需要修改导航栏的背景色继而改变状态栏的背景色,通过设置self.navigationController.navigationBar.barStyle
这个属性进行设置:
//黑色
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
//白色
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;