zoukankan      html  css  js  c++  java
  • [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 }
  • 相关阅读:
    Pyhon基础过滤字符串中的字母数字特殊符号
    [编程题] 斐波那契数列
    左旋转字符串(Java)-循环Index方式
    [编程题]字符流中第一个不重复的字符
    6525. 【2020.4.1模拟】Valleys
    6515. 【GDOI2020模拟03.28】数一数(one)
    6516. 【GDOI2020模拟03.28】数二数(two)
    6508. 【GDOI2020模拟03.11】我的朋友们
    6494. 【GDOI2020模拟03.08】勘探
    6491. 【GDOI2020模拟03.04】铺路
  • 原文地址:https://www.cnblogs.com/strengthen/p/10769420.html
Copyright © 2011-2022 走看看