状态栏:
导论:
ios上状态栏:显示信号 、时间、电池状态的20像素的位置
状态栏分为前景和背景部分
前景部分:就是指的显示电池、时间等部分;
背景部分:就是显示黑色或者图片的背景部分;
(一)设置statusBar的【前景部分】
这里只有两种颜色:
默认的黑色(UIStatusBarStyleDefault)
白色(UIStatusBarStyleLightContent)
可以设置的地方有两个:plist设置里面 和 程序代码里
1、plist
View controller-based status bar appearance (需要手动添加)
info.plist文件中,View controller-based status bar appearance 项的设置:
1,为YES,则ViewController对status bar的设置优先级高于application的设置。则[UIApplication sharedApplication].statusBarStyle 无效。
2,为NO,则以application的设置为准,viewController的prefersStatusBarHidden方法无效,是根本不会被调用的。
2、代码设置
(1)、[UIApplicationsharedApplication].statusBarStyle=UIStatusBarStyleLightContent;
(2)、重写- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;//白色
//returnUIStatusBarStyleDefault;//默认的黑色
}
(二)设置statusBar的【背景部分】
(1)、系统提供的方法
navigationBar的setBarTintColor接口,用此接口可改变statusBar的背景色:
self.navigationController.navigationBar.barTintColor= [UIColor redColor];
将状态栏和导航栏字体全变为白色:
self.navigationController.navigationBar.barStyle=UIBarStyleBlack;
此行代码能将状态栏和导航栏字体颜色全体改变,只能是黑色或白色.png
如果只想改变导航栏的字体颜色,可以这样
[self.navigationController.navigationBarsetTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColorredColor]}];
在默认显示的标题中直接修改文件的大小和颜色也是可以的
改变字体大小:
[self.navigationController.navigationBarsetTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColorredColor],NSFontAttributeName:[UIFontsystemFontOfSize:25]}];
或者可以设置背景图片
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"image01"] forBarMetrics:UIBarMetricsDefault];
改变状态栏的方法
方法一:
1、如果plist中设置如下:
View controller-based status bar appearance 设置为 NO
2、代码设置
[UIApplicationsharedApplication].statusBarStyle=UIStatusBarStyleLightContent;
方法二:
1、如果plist中设置如下:
View controller-based status bar appearance 设置为 YES 或者默认(不设置)
注意:
如果View controller-based status bar appearance为YES。
则[UIApplication sharedApplication].statusBarStyle 无效。
2、代码设置
self.navigationController.navigationBar.barStyle=UIBarStyleBlack;
或者在控制器中重写preferredStatusBarStyle方法,修改状态栏颜色
- (UIStatusBarStyle)preferredStatusBarStyle {
// return UIStatusBarStyleLightContent;
returnUIStatusBarStyleDefault;
}
隐藏状态栏:
一、高版本iOS的处理方法:
(一)、如果View controller-based status bar appearance 设为YES。
这时 ViewController中对status bar的设置优先级高于application的设置,用下面的方式隐藏status bar:
1、在ViewController中调用setNeedsStatusBarAppearanceUpdate,更新status bar的显示。
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
{
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
}
2、覆盖view controller的prefersStatusBarHidden的实现,返回YES。
- (BOOL)prefersStatusBarHidden
{
return YES;
}
(二)、如果View controller-based status bar appearance 设为NO,这时application的设置优先级最高,用下面的方式隐藏status bar:
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
二、低版本的处理方法:
综合上面的结论,如果iOS6和iOS7都支持,则处理方式如下:
(一)、如果View controller-based status bar appearance 设为NO。
则在iOS6和iOS7都是用下面的方法隐藏status bar。
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
(二)、如果View controller-based status bar appearance 设为YES。
则需要判断当前是iOS6还是iOS7。如果是iOS6,则还通过[UIApplication sharedApplication]隐藏。
如果是iOS7,则用setNeedsStatusBarAppearanceUpdate加prefersStatusBarHidden的方式来隐藏 status bar。
取info.plist中 View controller-based status bar appearance中的设置:
NSNumber *vcBasedStatusBarAppearance = [[NSBundle mainBundle]objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"];
if (vcBasedStatusBarAppearance) {
_isVCBasedStatusBarAppearance = vcBasedStatusBarAppearance.boolValue;
} else {
_isVCBasedStatusBarAppearance = YES; // default
}
以上图片均来自网络,如有侵权私信删除。