如何在swift 2/iOS 9中正确更改状态栏样式?

Joh*_*son 48 statusbar ios swift

我试图改变我的状态栏的样式,.Light但我在swift 1.2中实现的先前代码似乎不再起作用..这是代码:

override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.sharedApplication().statusBarStyle = .LightContent

    }
Run Code Online (Sandbox Code Playgroud)

现在我将我的View controller-based status bar appearanceinfo.plist设置为YES,并阅读UIKit文档,这将取消任何statusBarStyle更改并保持默认状态.但是,当我将设置更改为"NO"并更改statusBarStyle时,我<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable在调试器中得到了这个.那么这是Xcode中的一个错误吗?因为要更改状态栏样式,您必须将info.plist设置更改为NO,但是当发生这种情况时..错误

小智 72

Apple已添加了更改部署信息中状态栏样式的功能.只需选择"光".Xcode的ScreenShot

还设置View controller-based status bar appearance关键NOInfo.plist

信息plist

  • 请注意,如果在`Info.plist中将`基于控制器的状态栏外观`键设置为'NO`,则此**仅起作用** (13认同)
  • 这对我来说没有改变,XCode 7,iOS 9.2 (3认同)

ded*_*exe 45

我总是这样做.

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    //Changing Status Bar
    override func preferredStatusBarStyle() -> UIStatusBarStyle {

        //LightContent
        return UIStatusBarStyle.LightContent

        //Default
        //return UIStatusBarStyle.Default
    }
}
Run Code Online (Sandbox Code Playgroud)

它适用于任何swift 2.x版本.这要求您View controller-based status bar appearanceInfo.plist文件中设置YES.

  • @ real19 Yup,为我工作.只是为初学者清理一下.要做到这一点,只需在Info.plist文件中添加一个名为"查看基于控制器的状态栏外观"的属性(Xcode将自动完成属性名称,并自动识别它是一个布尔值),并将此属性设置为"是".这将使状态栏具有"轻量级"效果. (5认同)
  • 还请确保使用此方法在info.plist文件中设置标志,以使基于视图控制器的状态栏标志为yes (4认同)

小智 7

您仍然可以preferredStatusBarStyle在视图控制器中使用:

第1步:在info.plist中将ViewControllerBasedStatusBarAppearance设置为YES.第2步:将此代码添加到您要编辑的ViewController:

override func  preferredStatusBarStyle() -> UIStatusBarStyle {

    return UIStatusBarStyle.LightContent
}
Run Code Online (Sandbox Code Playgroud)

***提示:它似乎只能在ViewDidLoad(),didReceiveMemoryWarning()函数之外工作.


MRu*_*ade 7

斯威夫特3只加View controller-based status bar appearance用价值NOinfo.plist,然后添加到ViewController你想去的地方:

UIApplication.shared.statusBarStyle = UIStatusBarStyle.lightContent
Run Code Online (Sandbox Code Playgroud)


小智 6

部署信息的更改仍然有效,但是 - 您需要将"基于控制器的状态栏外观视图"键添加到plist文件,将其设置为NO.


小智 5

您也可以在AppDelegate中添加它.如果要为应用程序中的每个ViewController更改它,并且不必为每个其他VC使其不同,则此选项更好.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    application.statusBarStyle = UIStatusBarStyle.LightContent
    // instead of 
    // UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: false)
    // which gives warning about deprecation in iOS 9

    return true
}
Run Code Online (Sandbox Code Playgroud)