Hide statusbar under iOS7

In the info.plist file, the View controller-based status bar appearance item is set to YES, and the View controller's setting of the status bar has a higher priority than the application's setting. If it is NO, the settings of the application shall prevail. The prefersStatusBarHidden method of the view controller is invalid and will not be called at all.



1. If View controller-based status bar appearance is set to YES.


At this time, the setting of the status bar in the view controller has a higher priority than the setting of the application, and the status bar is hidden in the following way:



1. Call setNeedsStatusBarAppearanceUpdate in the view controller to update the display of the status bar.

- (void)viewDidAppear:(BOOL)animated  
{  
  [super viewDidAppear:animated];  
  if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) {  
     [self prefersStatusBarHidden];  
     [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];  
  }  
} 

2. Override the implementation of the view controller's prefersStatusBarHidden and return YES.

- (BOOL)prefersStatusBarHidden
{
   return YES;
}


2. If the View controller-based status bar appearance is set to NO, then the application setting priority is the highest, and the status bar is hidden in the following way:

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

Based on the above conclusions, if both iOS6 and iOS7 are supported, the processing method is as follows:

1. If View controller-based status bar appearance is set to NO.

In iOS6 and iOS7, the following method is used to hide the status bar.


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


2. If View controller-based status bar appearance is set to YES.


You need to determine whether the current is iOS6 or iOS7. If it is iOS6, it is also hidden through sharedApplication.


If it is iOS7, use setNeedsStatusBarAppearanceUpdate plus prefersStatusBarHidden to hide the status bar.


Take the settings in View controller-based status bar appearance in info.plist:

NSNumber *isVCBasedStatusBarAppearanceNum = [[NSBundle mainBundle]objectForInfoDictionaryKey:@"UIViewControllerBasedStatusBarAppearance"];

if (isVCBasedStatusBarAppearanceNum) 
{
  _isVCBasedStatusBarAppearance = isVCBasedStatusBarAppearanceNum.boolValue;

}  else {
_isVCBasedStatusBarAppearance = YES; // default

}

좋은 웹페이지 즐겨찾기