iOS7 StatusBar 在需要隐藏或改变样式时在UIViewConroller中调用:
- [self setNeedsStatusBarAppearanceUpdate];
1、隐藏
StatusBar在iOS7中无法使用一下接口隐藏:
- [[UIApplication sharedApplication] setStatusBarHidden:YES];
若要隐藏需要在UIViewController中实现下列函数:
- - (BOOL)prefersStatusBarHidden
- {
- return YES;
- }
2、样式改变
iOS 7中statusbar 有两种样式:白色字体UIStatusBarStyleLightContent和黑色字体UIStatusBarStyleDefault。
如果改变需要在UIViewController中实现:
- - (UIStatusBarStyle)preferredStatusBarStyle
- {
- return UIStatusBarStyleDefault;
- }
3、自定义状态栏,方法一
- UIWindow * statusWindow = [[UIWindow alloc] initWithFrame:[UIApplication sharedApplication].statusBarFrame];
- [statusWindow setWindowLevel:UIWindowLevelStatusBar + 1];
- [statusWindow setBackgroundColor:[UIColor clearColor]];
- UILabel * statusLabel = [[UILabel alloc] initWithFrame:statusWindow.bounds];
- statusLabel.text = @"RSSI:";
- statusLabel.textColor = [UIColor blueColor];
- statusLabel.textAlignment = NSTextAlignmentCenter;
- statusLabel.backgroundColor = [UIColor blackColor];
- [statusWindow addSubview:statusLabel];
- [statusWindow makeKeyAndVisible];
4、自定义状态栏,方法二
如果需要在状态栏显示自定义的消息时,就需要自定义状态栏。
代码如下:
XYCustomStatusBar.h
- #import <UIKit/UIKit.h>
- @interface XYCustomStatusBar : UIWindow{
- UILabel *_messageLabel;
- }
- - (void)showStatusMessage:(NSString *)message;
- - (void)hide;
- @end
XYCustomStatusBar.m
- #import "XYCustomStatusBar.h"
- @implementation XYCustomStatusBar
- - (void)dealloc{
- [super dealloc];
- [_messageLabel release], _messageLabel = nil;
- }
- - (id)init{
- self = [super init];
- if (self) {
- self.frame = [UIApplication sharedApplication].statusBarFrame;
- self.backgroundColor = [UIColor blackColor];
- self.windowLevel = UIWindowLevelStatusBar + 1.0f;
- _messageLabel = [[UILabel alloc] initWithFrame:self.bounds];
- [_messageLabel setTextColor:[UIColor whiteColor]];
- [_messageLabel setTextAlignment:NSTextAlignmentRight];
- [_messageLabel setBackgroundColor:[UIColor clearColor]];
- [self addSubview:_messageLabel];
- }
- return self;
- }
- - (void)showStatusMessage:(NSString *)message{
- self.hidden = NO;
- self.alpha = 1.0f;
- _messageLabel.text = @"";
- CGSize totalSize = self.frame.size;
- self.frame = (CGRect){ self.frame.origin, 0, totalSize.height };
- [UIView animateWithDuration:0.5 animations:^{
- self.frame = (CGRect){self.frame.origin, totalSize };
- } completion:^(BOOL finished){
- _messageLabel.text = message;
- }];
- }
- - (void)hide{
- self.alpha = 1.0f;
- [UIView animateWithDuration:0.5f animations:^{
- self.alpha = 0.0f;
- } completion:^(BOOL finished){
- _messageLabel.text = @"";
- self.hidden = YES;
- }];
- }
- @end
为了让自定义的状态栏可以让用户看到,设置了它的windowlevel,在ios中,windowlevel属性决定了UIWindow的显示层次,默认的windowlevel为UIWindowLevelNormal,即0.0 。为了能覆盖默认的状态栏,将windowlevel设置高点。其他代码基本上都不解释什么,如果要特殊效果,可以自己添加。