iOS7下隱藏status bar

info.plist文件中,View controller-based status bar appearance項設爲YES,則View controller對status bar的設置優先級高於application的設置。爲NO則以application的設置爲準,view controller的prefersStatusBarHidden方法無效,是根本不會被調用的。

 

1.View controller-based status bar appearance設爲YES。

這時 view controller中對status bar的設置優先級高於application的設置,用下面的方式隱藏status bar。

1.1 在view controller中調用setNeedsStatusBarAppearanceUpdate,更新status bar的顯示
複製代碼
 1 - (void)viewDidAppear:(BOOL)animated
 2 {
 3     [super viewDidAppear:animated];
 4 
 5     if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {
 6         [self prefersStatusBarHidden];
 7         [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
 8     }
 9 }    
複製代碼

 

1.2 覆蓋view controller的prefersStatusBarHidden的實現,返會YES。
1 - (BOOL)prefersStatusBarHidden
2 {
3     return YES;
4 }

 

2.View controller-based status bar appearance設爲NO

這時application的設置優先級最高,用下面的方式隱藏status bar:

1 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

 

3.結論

  • 如果View controller-based status bar appearance 設爲NO,iOS6和iOS7都是用下面的方法隱藏status bar。
1 [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:NO];

 

  • 如果View controller-based status bar appearance 設爲YES,則需要判斷當前是iOS6還是iOS7。

  如果是iOS6,則還通過sharedApplication隱藏。

  如果是iOS7,則用setNeedsStatusBarAppearanceUpdate加prefersStatusBarHidden的方式來隱藏 status bar。

 

4.取info.plist中 View controller-based status bar appearance中的設置

複製代碼
 1 NSNumber *isVCBasedStatusBarAppearanceNum = [[NSBundle mainBundle]objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"];
 2 if (isVCBasedStatusBarAppearanceNum) {
 3     _isVCBasedStatusBarAppearance = isVCBasedStatusBarAppearanceNum.boolValue;
 4 } else {
 5     _isVCBasedStatusBarAppearance = YES; // default
 6 }
複製代碼
發佈了25 篇原創文章 · 獲贊 0 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章