ios開發筆記--狀態列的自定義,隱藏

weixin_34321977發表於2016-04-12

iOS7 StatusBar 在需要隱藏或改變樣式時在UIViewConroller中呼叫:

[selfsetNeedsStatusBarAppearanceUpdate];

1、隱藏

StatusBar在iOS7中無法使用一下介面隱藏:

[[UIApplicationsharedApplication]setStatusBarHidden:YES];

若要隱藏需要在UIViewController中實現下列函式:

- (BOOL)prefersStatusBarHidden

{

returnYES;

}

2、樣式改變

iOS 7中statusbar 有兩種樣式:白色字型UIStatusBarStyleLightContent和黑色字型UIStatusBarStyleDefault。

如果改變需要在UIViewController中實現:

- (UIStatusBarStyle)preferredStatusBarStyle

{

returnUIStatusBarStyleDefault;

}

3、自定義狀態列,方法一

UIWindow* statusWindow = [[UIWindow alloc]initWithFrame:[UIApplication sharedApplication].statusBarFrame];

[statusWindows etWindowLevel:UIWindowLevelStatusBar +1];

[statusWindow setBackgroundColor:[UIColor clearColor]];

UILabel* statusLabel = [[UILabel alloc]initWithFrame:statusWindow.bounds];

statusLabel.text=@"RSSI:";

statusLabel.textColor= [UIColorblueColor];

statusLabel.textAlignment= NSTextAlignmentCenter;

statusLabel.backgroundColor= [UIColorblackColor];

[statusWindow addSubview:statusLabel];

[statusWindow makeKeyAndVisible];

4、自定義狀態列,方法二

如果需要在狀態列顯示自定義的訊息時,就需要自定義狀態列。

程式碼如下:

XYCustomStatusBar.h

#import

@interfaceXYCustomStatusBar : UIWindow{

UILabel*_messageLabel;

}

- (void)showStatusMessage:(NSString*)message;

- (void)hide;

@end

XYCustomStatusBar.m

#import "XYCustomStatusBar.h"

@implementationXYCustomStatusBar

- (void)dealloc{

[superdealloc];

[_messageLabelrelease], _messageLabel =nil;

}

- (id)init{

self= [superinit];

if(self) {

self.frame= [UIApplicationsharedApplication].statusBarFrame;

self.backgroundColor= [UIColorblackColor];

self.windowLevel= UIWindowLevelStatusBar +1.0f;

_messageLabel = [[UILabelalloc]initWithFrame:self.bounds];

[_messageLabelsetTextColor:[UIColorwhiteColor]];

[_messageLabelsetTextAlignment:NSTextAlignmentRight];

[_messageLabelsetBackgroundColor:[UIColorclearColor]];

[selfaddSubview:_messageLabel];

}

returnself;

}

- (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};

[UIVie wanimateWithDuration:0.5animations:^{

self.frame= (CGRect){self.frame.origin, totalSize };

}completion:^(BOOLfinished){

_messageLabel.text= message;

}];

}

- (void)hide{

self.alpha=1.0f;

[UIView animateWithDuration:0.5fanimations:^{

self.alpha=0.0f;

}completion:^(BOOLfinished){

_messageLabel.text=@"";

self.hidden=YES;

}];

}

@end

為了讓自定義的狀態列可以讓使用者看到,設定了它的windowlevel,在ios中,windowlevel屬性決定了UIWindow的顯示層次,預設的windowlevel為UIWindowLevelNormal,即0.0 。為了能覆蓋預設的狀態列,將windowlevel設定高點。其他程式碼基本上都不解釋什麼,如果要特殊效果,可以自己新增。

相關文章