更改状态栏的颜色

Tyl*_*utt 11 xcode statusbar ios uistatusbar swift

我试图将状态栏的颜色更改为蓝色或其他颜色.

这可能吗,还是Apple不允许这样做?

use*_*143 14

首先在Plist中设置View controller-based status bar appearanceNO

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
    if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) {
        statusBar.backgroundColor = UIColor.blue
    }
    UIApplication.shared.statusBarStyle = .lightContent

    return true
}
Run Code Online (Sandbox Code Playgroud)

输出屏幕截图如下

在此输入图像描述

  • 这是使用私有的,未记录的API,可能无法通过应用审核.做这样的事情从来都不是一个好主意.当私有API在未来的某些iOS更新中发生变化时,它可能会崩溃,特别是在编写时. (5认同)

byJ*_*van 8

不,使用现成的公共API是不可能的.

但随着发布iOS 7,您可以更改状态栏的外观.因此,我发布了我的解决方法.

通过覆盖以下内容从单个视图控制器preferredStatusBarStyle:

-(UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用该UIApplication statusBarStyle方法设置状态栏样式.为此,请插入名为"查看基于控制器的状态栏外观"的新密钥,并将值设置为NO. 在此输入图像描述

通过禁用"查看基于控制器的状态栏外观",可以使用以下代码设置状态栏样式.

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Run Code Online (Sandbox Code Playgroud)

最后,更改UINavigationBar属性色调颜色,如下所示

[[UINavigationBar appearance] setBarTintColor:[UIColor blueColor]];
Run Code Online (Sandbox Code Playgroud)


Kru*_*nal 6


您可以在应用程序启动期间或视图控制器的viewDidLoad期间为状态栏设置背景颜色.

extension UIApplication {

    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

}

// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
        return true
    }
}


or 
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
    }

}
Run Code Online (Sandbox Code Playgroud)



结果如下:

在此输入图像描述

以下是有关状态栏更改的Apple指南/说明.状态栏中仅允许黑暗和浅色(同时为黑色).

这是 - 如何更改状态栏样式:

如果要设置状态栏样式,则应用程序级别将设置UIViewControllerBasedStatusBarAppearanceNO".plist"文件.

如果您要在视图控制器级别设置状态栏样式,请按照下列步骤操作:

  1. 如果需要仅在UIViewController级别设置状态栏样式,请在文件中设置UIViewControllerBasedStatusBarAppearanceto .YES.plist
  2. 在viewDidLoad中添加功能 - setNeedsStatusBarAppearanceUpdate

  3. 覆盖视图控制器中的preferredStatusBarStyle.

-

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
Run Code Online (Sandbox Code Playgroud)

根据状态栏样式设置级别设置.plist的值. 在此输入图像描述