iOS控件 — 状态栏 Status Bar
一、样式
1. StatusBar有两种样式: (默认高度为20)
-
UIStatusBarStyleDefault :
UIStatusBarStyleDefault.png -
UIStatusBarStyleLightContent
UIStatusBarStyleLightContent.png
2. 改变状态栏文字颜色方法:
方法1:直接设置storyboard的controller设置:
storyboard设置.png方法2:代码设置,在UIViewController中重载: (个别页面改变的话,建议用这种方法!)
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
这个方法不能直接调用,在需要改变样式的地方调用:
**[self setNeedsStatusBarAppearanceUpdate] **
示例:
- (void)viewWillAppear:(BOOL)animated
{
[self setNeedsStatusBarAppearanceUpdate];
}
方法3:整个应用的状态栏颜色统一设置
info.plist.png在info.plist中 View controller-based status bar appearance 设为NO(不设置时默认为YES),利用[UIApplication sharedApplication].statusBarStyle(优先)调节。
在AppDelegate.m中:(也可根据不同view个别添加到不同位置调节)
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
// 或:
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
// 或(带动画效果,一般在willappear/willdisappear里设置)
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
方法4:如果有navigationbar,则可 设置navigationbarstyle去调节statusbar的颜色
通过storyboard调节navigationBarStyle
或代码:
[viewController.navigationBar setBarStyle: UIBarStyleBlack];
二、StatusBar的显示和隐藏
1. 个别页面显示和隐藏
推荐方法:
显示和隐藏StatusBar只要在UIViewController中重载:
- (BOOL)prefersStatusBarHidden
{
return YES;
}
同样式改变一样需要调用**[self setNeedsStatusBarAppearanceUpdate] **方法.
补充:
如果iOS6和iOS7都支持,则处理方式如下:
1)如果info.plist中 View controller-based status bar appearance 设为NO。
则在iOS6和iOS7都是用下面的方法隐藏status bar。
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];
2)如果View controller-based status bar appearance 设为YES。(默认)
则需要判断当前是iOS6还是iOS7。
如果是iOS6,则还通过sharedApplication隐藏。
如果是iOS7,则用setNeedsStatusBarAppearanceUpdate的方式来隐藏status bar。
2. 全局默认无StatusBar
需要在项目配置info.plist文件总将Status bar is initially hidden 字段设置为 YES;并添加View controller-based status bar appearance 字段, 并将值设置为 NO:
info.plist.png也可和上面一样设置来控制StatusBar全局隐藏:
[[UIApplication sharedApplication] setStatusBarHidden:YES];
三、动画效果
现在有两种动画效果:
- UIStatusBarAnimationFade
- UIStatusBarAnimationSlide.
从他们的名字可以得知他的具体是什么样的效果。
实现动画需要重载:
- (UIStatusBarAnimation )preferredStatusBarUpdateAnimation
{
return UIStatusBarAnimationSlide;
}
但是重载这个方法后,并没有动画效果。
这时,我们需要把[self setNeedsStatusBarAppearanceUpdate] 放在动画block中执行:
[UIView animateWithDuration:0.3
animations:^{
[self setNeedsStatusBarAppearanceUpdate];
}];
这样动画效果就出现了。
ps: 有时有特殊的要求,需要对StatusBar的背景色进行改变,则可参考下面简书的一篇文章,感觉不错:
ios 状态栏statusBar的背景颜色
其实这些是一开始学iOS所记下的笔记,很散乱,就打算拿出来整理下,分享分享,有什么疑问随时留言讨论下哈~