一笆凌、iOS9之前据途,全局修改狀態(tài)欄步驟:
1澄峰、在項(xiàng)目的Info.plist中添加字段View controller-based status bar appearance,并設(shè)置為NO呀潭;
2、使用UIApplication.shared.statusBarStyle和UIApplication.shared.isStatusBarHidden來修改狀態(tài)欄的顏色和隱藏與否至非;
通常代碼如下(此處統(tǒng)一在viewWillAppear和viewWillDisappear做說明钠署,可根據(jù)需求做響應(yīng)修改):
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UIApplication.shared.statusBarStyle = .lightContent
UIApplication.shared.isStatusBarHidden = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = .default
UIApplication.shared.isStatusBarHidden = false
}
上述方法在iOS9的時(shí)候被廢棄了,蘋果推薦方法如下荒椭。谐鼎。。
二趣惠、 使用preferredStatusBarStyle和prefersStatusBarHidden實(shí)現(xiàn):
1狸棍、在項(xiàng)目的Info.plist中添加字段View controller-based status bar appearance,并設(shè)置為YES味悄;
2草戈、在需要修改的控制器中重寫下面方法:
override var preferredStatusBarStyle: UIStatusBarStyle {
/** 目前只有兩種顏色可選
* .default 黑色
* .lightContent 白色
*/
return .lightContent
}
override var prefersStatusBarHidden: Bool {
return true
}
如果需要?jiǎng)討B(tài)修改狀態(tài)欄隱藏與否,則可以添加一個(gè)變量侍瑟,在set方法的時(shí)候調(diào)用setNeedsStatusBarAppearanceUpdate
var ifStatusBarHidden = true {
didSet {
setNeedsStatusBarAppearanceUpdate()
}
}
在需要修改的地方直接給ifStatusBarHidden賦值唐片,然后在prefersStatusBarHidden中直接返回ifStatusBarHidden
有些時(shí)候上述第二種方法所有設(shè)置完不起作用,即程序沒有走preferred方法涨颜,那是因?yàn)楫?dāng)我們調(diào)用setNeedsStatusBarAppearanceUpdate時(shí)费韭,系統(tǒng)會(huì)調(diào)用容器控制器即根視圖的preferred方法,一般我們用UINavigationController或UITabBarController做根視圖容器時(shí)咐低,系統(tǒng)根本就不會(huì)調(diào)用子視圖控制器(UIViewController)方法揽思,我的解決辦法是,自定義一個(gè)導(dǎo)航控制器见擦,重寫下面方法:
override var childForStatusBarStyle: UIViewController? { // 狀態(tài)欄顏色
return self.topViewController
}
override var childForStatusBarHidden: UIViewController? { // 狀態(tài)欄隱藏與否
return self.topViewController
}