Xcode Hide white status bar ios 10

2019-02-22 11:42发布

问题:

I want white status bar in my app. For this I set View controller-based status bar appearance to NO and Status bar style to UIStatusBarStyleLightContent. But now I need to hide status bar in some view controllers. To hide it I have to set View controller-based status bar appearance to YES and add - (BOOL)prefersStatusBarHidden {return YES;}. But status bar is black now. It's black when View controller-based status bar appearance is YES and white if NO. So the question is, how to set white status bar and hide it?

UPD: code in VC that I want to have white status bar (prefferdSTatusBarStyle not called)

code in VC with hidden status bar

.plist settings

Result is black status bar, that hides in some VC

UPD2:

I know it's bad to use deprecated methods but with [[UIApplication sharedApplication] setStatusBarHidden:YES]; everything works as I want. If anyone have better solution please let me know.

回答1:

you can set using xcode status bar style is "light"



回答2:

This is the swift version:

To hide the status bar or change it's appearance, you need to override the following properties in your view controller itself

override var prefersStatusBarHidden: Bool{
        return true
}

the above hides the status bar and below if you want to set it to white:

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
}


回答3:

In your plist file add View controller-based status bar appearance Bool property and set it to YES.

Now in your view controller add the methods like below:

// TO MAKE STATUS BAR WHITE
override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
}

// TO MAKE STATUS BAR BLACK
override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
}

// RETURN TRUE TO HIDE AND FALSE TO SHOW STATUS BAR
override func prefersStatusBarHidden() -> Bool {
        return true
}

For Objective-C

- (BOOL)prefersStatusBarHidden {
    return NO;
}

-(UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

For removing redundant code you can make a BaseViewController as subclass of UIViewController and add the methods in that class. And override the method in the class which requires change.



回答4:

if your viewcontroller is embedded in UInavigationController then try writing this code in your

-(BOOL)prefreStatusBarHidden
{
       return [self.navigationController prefersStatusBarHidden];
}


回答5:

You can do this by setting the navigation background image in your base viewcontroller.

UIImage *bgImage = [UIImage imageNamed:@"bg_navigationbar"];
[self.navigationController.navigationBar setBackgroundImage:bgImage forBarMetrics:UIBarMetricsDefault];