[Swift]動態變化頂部狀態欄(statusBar)的顏色


★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公眾號:山青詠芝(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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM