One, the status bar of the hidden
There are two main ways to hide the status bar, let's look at it together.
Method one: Through code control
@interface uiapplication (uiapplicationdeprecated)
//Setting Statusbarhidden does nothing if your application is Using the default uiviewcontroller-based status bar system.
@property (ReadWrite, Nonatomic,getter=isstatusbarhidden) BOOL Statusbarhidden
Ns_deprecated_ios (2_0, 9_0, "use- [Uiviewcontroller Prefersstatusbarhidden] ") __tvos_prohibited;
-(void) Setstatusbarhidden: (BOOL) hidden animated: (bool) animated
Ns_deprecated_ios (2_0, 3_2) __tvos_prohibited;
Use-setstatusbarhidden:withanimation:
-(void) Setstatusbarhidden: (BOOL) Hidden withanimation: ( uistatusbaranimation) Animation
Ns_deprecated_ios (3_2, 9_0, "use-[uiviewcontroller Prefersstatusbarhidden]") _ _tvos_prohibited;
Note: Let's take a look at // Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
this comment tip, Apple prompts the developer to use a system based status bar style your settings are not effective, in the next to be introduced through the Info.plist hidden status bar to also pay attention to this matter.
Info.plist
Add a View controller-based status bar appearance
setting option in to, set to no so you can use the method above.
Note: The View controller-based status bar appearance
type is added Bool
, the default is yes, unfortunately iOS9 Apple has not recommended these methods, these methods can be used but will report a warning.
So how do you do that when these methods are disabled? The comments have suggested Use -[UIViewController prefersStatusBarHidden]
that this is the UIViewController
new method that Apple added after IOS7, and that the purpose of this is to give developers more flexibility in customizing each ViewController
status bar.
-(BOOL) prefersstatusbarhidden{return
YES;
IOS7 UIViewController
not only provides this function for setting the status bar, but also the rest, in detail later.
Method Two: Through Info.plist control
1, first we still have to set this (in the 2nd step of the two ways to set this parameter)
2, then set (two ways)
Or
The two are equivalent! And the state of both is synchronized.
Second, status bar style
Take a look at all the styles (explain the comments)
typedef ns_enum (Nsinteger, Uistatusbarstyle) {
//default style, black-text transparent status bar, suitable for pages with a bright background color
uistatusbarstyledefault = 0,//Dark content, for using on light backgrounds
//white transparent status bar, suitable for pages with dark background color
uistatusbarstylelightcontent ns_ Enum_available_ios (7_0) = 1,//Light content, for use on dark backgrounds
//iOS7.0 before black background white, iOS7 later with Uistatusbarstylelig Htcontent effect like
uistatusbarstyleblacktranslucent Ns_enum_deprecated_ios (2_0, 7_0, "use Uistatusbarstylelightcontent ") = 1,
//iOS7.0 Previous startup page is Gray White, iOS7 after the same as
the uistatusbarstylelightcontent effect Uistatusbarstyleblackopaque Ns_enum_deprecated_ios (2_0, 7_0, "use uistatusbarstylelightcontent") = 2,
} __ tvos_prohibited;
How to set the status bar style
Setting The Statusbarstyle does nothing if your application is using the default uiviewcontroller-based status bar Syst EM.
@property (ReadWrite, nonatomic) uistatusbarstyle statusbarstyle
Ns_deprecated_ios (2_0, 9_0, "use-[ Uiviewcontroller Preferredstatusbarstyle] ") __tvos_prohibited;
-(void) Setstatusbarstyle: (Uistatusbarstyle) Statusbarstyle animated: (BOOL) animated
Ns_deprecated_ios (2_0, 9_0 , "Use-[uiviewcontroller Preferredstatusbarstyle]") __tvos_prohibited;
Likewise iOS9 after these methods were disabled, Apple recommended in the concrete viewController
Use -[UIViewController preferredStatusBarStyle]
-(Uistatusbarstyle) preferredstatusbarstyle{return
uistatusbarstylelightcontent;
}
Note: What we usually use viewController
is nested in, where UINavigationController
viewController
using a - (UIStatusBarStyle)preferredStatusBarStyle;
function will find that the setting does not take effect.
The system also provides us with a function - (UIViewController *)childViewControllerForStatusBarStyle
that can also solve the problem, which we'll talk about later.
Third, background color
IOS7 the background of the status bar is transparent in the future by default, one way is to write a UIView
background to add to the status bar, so you can set the color of the status bar at will.
Another way is navigationBar
setBarTintColor
to change the status bar color by setting the color
Other functions related to the status bar in Uiviewcontroller
preferredstatusbarupdateanimation function
-(uistatusbaranimation) preferredstatusbarupdateanimation
Ns_available_ios (7_0) __tvos_prohibited; Defaults to Uistatusbaranimationfade
If you want to change the style of the status bar in the current display UIViewController
, you need to call the above function. When this function is called, the system calls the method to redraw preferredStatusBarStyle
the style of the status bar actively
Childviewcontrollerforstatusbarstyle function
Override to return a child view controller or nil. If Non-nil, that view controller ' s status bar appearance attributes'll be used. If nil, self is used. Whenever the return values from this methods change,-setneedsupdatedstatusbarattributes should to be called.
-(Nullable Uiviewcontroller *) Childviewcontrollerforstatusbarstyle
Ns_available_ios (7_0) __tvos_prohibited;
The return value of this function is returned by default nil
, at which point the system will call the current function, and viewControllerA
if the preferredStatusBarStyle
return value is another viewControllerB
then the system will call viewControllerB
the preferredStatusBarStyle
function.
Use this function to solve UINavigationController
the problem of invalid nested settings style.
Explain why the nested UINavigationController
viewController
preferredStatusBarStyle
function settings are not valid:
When we're nesting UINavigationController
, we're AppDelegate.window.rootViewController
usually created, and the navigationController
first thing we call is the navigationController
function in, because the childViewControllerForStatusBarStyle
default returns nil
, then navigationController
we call the preferredStatusBarStyle
function itself, so we viewController
The preferredStatusBarStyle
status bar style set through the function in is not called to be discovered, so it is invalid.
So we're going to create an inherited UINavigationcontroller
NavigationController
, overriding function in this subclass. childViewControllerForStatusBarStyle
-(Uiviewcontroller *) childviewcontrollerforstatusbarstyle{return
Self.topviewcontroller;
}
So that navigationController
the childViewControllerForStatusBarStyle
function in this will return to the top of the class navigationController
viewController
, then the set of viewController
functions in the preferredStatusBarStyle
system will be informed
Childviewcontrollerforstatusbarhidden function
-(Nullable Uiviewcontroller *) Childviewcontrollerforstatusbarhidden
Ns_available_ios (7_0) __tvos_prohibited;
childViewControllerForStatusBarHidden
function of the use of the same principle, no longer repeat.
preferredstatusbarupdateanimation function
Override to return the type of animation that should is used for status bar changes for this view controller. This is currently only affects changes to Prefersstatusbarhidden.
-(uistatusbaranimation) preferredstatusbarupdateanimation
Ns_available_ios (7_0) __tvos_prohibited;//Defaults To Uistatusbaranimationfade
The animation form is as follows
typedef ns_enum (Nsinteger, uistatusbaranimation) {
uistatusbaranimationnone,
uistatusbaranimationfade NS_ Enum_available_ios (3_2),
uistatusbaranimationslide Ns_enum_available_ios (3_2),
__tvos_prohibited;
This function returns the animation effect. The animation effect is prefersStatusBarHidden
displayed only when the function returns a value, and by calling the
[self setNeedsStatusBarAppearanceUpdate]
function to redraw the status bar
Four, the application
We can UIWindow
implement a custom status bar by hiding the system status bar and then customizing it by setting setWindowLevel:UIWindowLevelStatusBar
.
Summarize
This is the full content of this article, I hope you can help iOS developers, if you have questions you can message exchange.