如何使用swift在一个视图控制器中更改状态栏颜色?

Iva*_*n A 10 xcode ios swift

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Run Code Online (Sandbox Code Playgroud)

我使用这个在所有应用程序中将状态栏更改为亮.但现在我需要在一个View Controller中将其更改为黑色.我怎样才能做到这一点?

Mar*_*Him 12

View controller-based status bar appearance在project.plist中设置为NO

使用viewWillAppear和将viewWillDisappear设置和重置statusBarStyle,同时保持属性与之前的statusBarStyle一样

let initialStatusBarStyle : UIStatusBarStyle

func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    initialStatusBarStyle = UIApplication.sharedApplication().statusBarStyle
    UIApplication.sharedApplication().setStatusBarStyle(.LightContent, animated: animated)
}

func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().setStatusBarStyle(initialStatusBarStyle, animated: animated)
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*ens 12

Xcode 8.1,带有@IBDesignable的Swift 3解决方案

这个解决方案有点不同:

  • UIViewController的子类集中逻辑
  • 没有viewDidLoad或viewDidDisappear的代码
  • 使用@IBDesignable,以便您可以在故事板上的"属性"检查器中设置状态栏颜色

第1步 - 设置Info.plist文件

的Info.plist

第2步 - 子类UIViewController

import UIKit

@IBDesignable
class DesignableViewController: UIViewController {

    @IBInspectable var LightStatusBar: Bool = false

    override var preferredStatusBarStyle: UIStatusBarStyle {
        get {
            if LightStatusBar {
                return UIStatusBarStyle.lightContent
            } else {
                return UIStatusBarStyle.default
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

第3步 - 从DesignableViewController继承

从以下位置更改ViewController的代码:

class ViewController: UIViewController {
Run Code Online (Sandbox Code Playgroud)

至:

class ViewController: DesignableViewController {
Run Code Online (Sandbox Code Playgroud)

第4步 - 在故事板上设置您的偏好

选择Storyboard上的ViewControllers并转到Attributes Inspector: 属性检查员

第5步 - 运行项目和测试

在我的项目中,我设置了一个带有2个视图控制器的标签栏控制器,并在两者之间来回切换.似乎对我来说工作正常. 灯状态栏 黑暗状态栏


rez*_*afi 7

解决:
Swift 3.1

只需在View Controller中使用此代码:

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