自界說狀況欄
有時刻,須要在狀況欄上顯示一些自界說信息,好比新浪微博的官方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;
隱蔽狀況欄
假如想要隱蔽狀況欄,有兩種做法:
狀況欄能否隱蔽默許由掌握器治理,也就是說,以後狀況欄所對應的掌握器決議能否隱蔽狀況欄。
UIViewController中供給了一個prefeXmlRss/ target=_blank class=infotextkey>XmlRss/ target=_blank class=infotextkey>RsstatusBarHidden辦法用於檢查以後的掌握器顯示的狀況欄能否隱蔽,默許這個辦法前往的是NO,也就是不隱蔽。然則並沒有供給響應的辦法來設置隱蔽狀況欄。
這類情形我們可以重寫prefeXmlRss/ target=_blank class=infotextkey>XmlRss/ target=_blank class=infotextkey>RsstatusBarHidden辦法,經由過程修正它的前往值到達目標。
- (BOOL)prefeXmlRss/ target=_blank class=infotextkey>RsstatusBarHidden
{
return YES;
}
如許狀況欄便可以隱蔽了。
另外一種做法是不讓掌握器來決議能否隱蔽狀況欄,而是讓[UIApplication sharedApplication]來決議。
[UIApplication sharedApplication].statusBarHidden = YES;
運轉法式發明狀況欄並沒有隱蔽。檢查文檔可以發明:
Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
意思是假如應用默許的掌握器治理狀況欄(第一種做法提到的),那末設置statusBarHidden是沒有用果的。想要封閉掌握器的治理,須要我們給Info.plist增長一個key:
View controller-based status bar appearance
而且設置為NO,如許便可以經由過程設置statusBarHidden來隱蔽狀況欄了。(這個key是Info.plist添加Key湧現的下拉欄裡的最初一個)
當掌握器治理狀況欄時
- (UIViewController *)childViewControllerForStatusBarHidden
- (UIViewController *)childViewControllerForStatusBarStyle
這兩個辦法可以將狀況欄的掌握權交給子掌握器治理,假如前往nil則表現掌握器本身來治理狀況欄;假如前往子掌握器,則表現子掌握器來治理狀況欄。好比在navigation controller中完成prefersStatusBarHidden辦法能夠其實不管用,由於它能夠默許在childViewControllerForStatusBarHidden中前往的是導航棧頂掌握器,此時狀況欄由棧頂掌握器來決議。假如想讓navigation controller來決議,那末可以在類中按上面的方法完成:
- (UIViewController *)childViewControllerForStatusBarHidden
{
return nil;
}
此時,狀況欄的治理權在導航掌握器。
【詳解在iOS App中自界說和隱蔽狀況欄的辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!