更改状态栏的颜色

时间:2017-03-28 15:24:40

标签: ios swift xcode statusbar uistatusbar

我正在尝试将状态栏的颜色更改为蓝色或其他颜色。

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

5 个答案:

答案 0 :(得分:14)

Plist首先将View controller-based status bar appearance设置为NO

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
}

输出屏幕截图位于

之下

enter image description here

答案 1 :(得分:8)

  

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

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

通过覆盖preferredStatusBarStyle

从单个视图控制器
-(UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
}

或者,您可以使用UIApplication statusBarStyle方法设置状态栏样式。为此,请插入名为“查看基于控制器的状态栏外观”的新密钥,并将值设置为NO。 enter image description here

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

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

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

[[UINavigationBar appearance] setBarTintColor:[UIColor blueColor]];

答案 2 :(得分: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
    }

}



结果如下:

enter image description here

以下是关于状态栏更改的Apple Guidelines/Instruction。只有黑暗&状态栏中允许亮(同时为黑色)。

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

如果要设置状态栏样式,应用程序级别,然后在`.plist'中将UIViewControllerBasedStatusBarAppearance设置为NO。文件。

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

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

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

  4. -

    override func viewDidLoad() {
        super.viewDidLoad()
        self.setNeedsStatusBarAppearanceUpdate()
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    

    根据状态栏样式设置级别设置.plist的值。 enter image description here

答案 3 :(得分:3)

以下是我的解决方法:创建SortedListWithKey([[1, 2], [3, 4]], key=<class '__main__.KeyFunc'>) SortedListWithKey([[1, 2], [3, 4]], key=<class '__main__.KeyFunc'>) ,将其添加到视图控制器的根视图中作为人工状态栏背景
1.创建UIView

UIView

2.将其添加到视图控制器的根视图

// status bar's height is 20.0pt
CGRect frame = CGRectMake(0.0, 0.0, [UIScreen mainScreen].bounds.size.width, 20.0);
UIView *fakeStatusBarBG = [[UIView alloc] initWithFrame:frame];
fakeStatusBarBG.backgroundColor = [UIColor yourColor];

你去吧。

3.(附加)更改状态栏上的内容颜色,仅为白色或黑色。

// self is your view controller, make sure fakeStatusBarBG is the top subview in your view hierarchy
[self.view insertSubview:fakeStatusBarBG aboveSubview:yourTopSubview];

此解决方法不使用私有API,因此您是安全的。 : - )

答案 4 :(得分:1)

我做了这个扩展程序来更改状态栏的颜色

public extension UIViewController {
    func setStatusBar(color: UIColor) {
        let tag = 12321
        if let taggedView = self.view.viewWithTag(tag){
            taggedView.removeFromSuperview()
        }
        let overView = UIView()
        overView.frame = UIApplication.shared.statusBarFrame
        overView.backgroundColor = color
        overView.tag = tag
        self.view.addSubview(overView)
    }
}

这是Viewcontroller中任何地方的用法:

setStatusBar(color: .red)