- [UIApplication sharedApplication].
- networkActivityIndicatorVisible = YES; //顯示
-
- [UIApplication sharedApplication].
- networkActivityIndicatorVisible = NO; //隱藏
狀態欄是可以通過UIApplication類提供的一些方法來修改的,比如完全去掉狀態欄或者修改風格,不過這些改變只是在你的程序內部,當你退出你的程序又會復原。
1.隱藏狀態欄
記得隱藏狀態欄後的你的“桌面”就增加320×20的大小,所以最好是在任何window或者view創建之前隱藏它。
2.狀態欄風格
3.狀態欄方向
有時候,需要在狀態欄上顯示一些自定義信息,比如新浪微博的官方iOS客戶端:告知用戶信息處於發送隊列、發送成功或者發送失敗。
如上圖,通過在狀態欄顯示自定義信息,可以給用戶友好又不影響軟件使用的提示。
爲此,我們顯得定義一個自定義狀態欄類,包含一個顯示信息的Label:
- @interface CustomStatusBar : UIWindow
- {
- UILabel *_messageLabel;
- }
- - (void)showStatusMessage:(NSString *)message;
- - (void)hide;
- @end
接着,設置大小和系統狀態欄一致,背景爲黑色:
- self.frame = [UIApplication sharedApplication].statusBarFrame;
- self.backgroundColor = [UIColor blackColor];
到這裏,爲了讓自定義的狀態欄可以讓用戶看到,還需要設置它的windowLevel。
在iOS中,windowLevel屬性決定了UIWindow的顯示層次。默認的windowLevel爲UIWindowLevelNormal,即0.0。
系統定義了三個層次如下,具體可參考官方文檔:
- const UIWindowLevel UIWindowLevelNormal;
- const UIWindowLevel UIWindowLevelAlert;
- const UIWindowLevel UIWindowLevelStatusBar;
- typedef CGFloat UIWindowLevel;
爲了能夠覆蓋系統默認的狀態欄,我們把自定義的狀態欄的windowLevel調高點:
- self.windowLevel = UIWindowLevelStatusBar + 1.0f;
最後,爲顯示信息和隱藏添加一點無傷大雅的動畫:
- - (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.5f 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;
- }];;
- }