★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公眾號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/ )
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/10769420.html
➤如果鏈接不是山青詠芝的博客園地址,則可能是爬取作者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持作者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
頂部狀態欄(statusBar)的兩種樣式:
(1)、default 樣式:黑色。
(2)、light 樣式:白色
一、無導航欄情況
如果沒有使用導航控制器 UINavigationController, 或者說它的 navigationBar 被隱藏,
則需要重寫 preferredStatusBarStyle 方法(在里面返回希望使用的樣式),
然后在需要更新的時候調用 setNeedsStatusBarAppearanceUpdate() 方法來觸發它。
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 // 當前statusBar使用的樣式 6 var style: UIStatusBarStyle = .default 7 8 // 重現statusBar相關方法 9 override var preferredStatusBarStyle: UIStatusBarStyle { 10 return self.style 11 } 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 } 16 17 // 每次點擊按鈕切換一次樣式 18 @IBAction func changeStyle(_ sender: Any) { 19 if self.style == .lightContent { 20 self.style = .default 21 } else { 22 self.style = .lightContent 23 } 24 setNeedsStatusBarAppearanceUpdate() 25 } 26 }
二、存在導航欄情況
如果使用了導航控制器 UINavigationController, 且它的 navigationBar 沒有被隱藏,
那么會發現即使重寫 preferredStatusBarStyle 方法,這個方法也不會被調用。
因為此時狀態欄的樣式是根據導航欄的樣式來自動變換的。
注1:切換導航欄樣式時,狀態欄文字樣式也會自動隨之變換。
注2:即使我們修改了導航欄的背景色或者背景片,只要導航欄樣式變化了,狀態欄也會隨之變化。
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 // 將導航欄背景色設置橙色 9 self.navigationController?.navigationBar.barTintColor = UIColor.orange 10 } 11 12 // 每次點擊按鈕切換一次樣式 13 @IBAction func changeStyle(_ sender: Any) { 14 if let navigationBar = self.navigationController?.navigationBar { 15 // 切換導航欄樣式 16 if navigationBar.barStyle == .default { 17 navigationBar.barStyle = .black 18 } else { 19 navigationBar.barStyle = .default 20 } 21 } 22 } 23 }
根據實際情況,如果上面代碼不符合理想情況,可嘗試:
1 import UIKit 2 3 class ViewController: UIViewController { 4 5 // 當前statusBar使用的樣式 6 var style: UIStatusBarStyle = .default 7 8 // 重現statusBar相關方法 9 override var preferredStatusBarStyle: UIStatusBarStyle { 10 return self.style 11 } 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 } 16 17 // 每次點擊按鈕切換一次樣式 18 @IBAction func changeStyle(_ sender: Any) { 19 if let isHidden = self.navigationController?.isNavigationBarHidden { 20 // 切換導航欄顯示或者隱藏 21 self.navigationController?.isNavigationBarHidden = !isHidden 22 // 更新狀態欄顏色 23 self.style = !isHidden ? .lightContent : .default 24 setNeedsStatusBarAppearanceUpdate() 25 } 26 } 27 }
