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

时间:2015-09-19 23:49:34

标签: ios swift statusbar

我试图将状态栏的样式更改为.Light,但我之前在swift 1.2中实现的代码似乎不再起作用了......这里是代码:< / p>

override func viewDidLoad() {
        super.viewDidLoad()

        UIApplication.sharedApplication().statusBarStyle = .LightContent

    }

现在我的View controller-based status bar appearance info.plist设置为YES,并且读取UIKit文档,这将取消任何statusBarStyle更改并保持默认状态。但是当我将设置更改为“否”时并更改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,但是当发生这种情况时..错误

11 个答案:

答案 0 :(得分:72)

Apple已添加了更改部署信息中状态栏样式的功能。只需选择“Light”。ScreenShot of Xcode

同时在View controller-based status bar appearance

中将NO密钥设置为Info.plist

info plist

答案 1 :(得分:7)

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

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

override func  preferredStatusBarStyle() -> UIStatusBarStyle {

    return UIStatusBarStyle.LightContent
}

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

答案 2 :(得分:7)

Swift 3只需将值View controller-based status bar appearance的{​​{1}}添加到NO,然后添加到info.plist您想要的位置:

ViewController

答案 3 :(得分:6)

部署信息的更改有效但无论如何 - 您需要添加 '查看基于控制器的状态栏外观'键将plist文件设置为NO。

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

答案 5 :(得分:4)

看起来它是Xcode 7.0中的一个错误。设置Error>: CGContextSaveGState: invalid context 0x0.

时,我也收到View controller-based status bar appearance错误

现在我只是覆盖每个视图控制器中的状态栏颜色。

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
} 

答案 6 :(得分:4)

你可以选择&#34; light&#34;在部署信息中,但是您还需要添加&#34;基于View控制器的状态栏外观&#34;并将其设置为NO。

答案 7 :(得分:4)

在此尝试这可能会对您有所帮助

首先转到info.plist文件并添加此&#34;查看基于控制器的状态栏外观&#34;作为键并将值设置为NO

以下显示在图片enter image description here

之后来到AppDelegate.swift文件并通过此private void cboeCID_SelectedIndexChanged_1(object sender, EventArgs e) { var CID = Convert.ToInt32(cboeCID.Text); using (var db = new Entities2()) { var course = (from a in db.Student_Course where a.CID == CID select a).First(); editDataGridView.Columns[course.SID].DataPropertyName = "clmSID"; editDataGridView.Columns[course.Mark].DataPropertyName = "clmMark"; }; } 代码行

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
像这样

答案 8 :(得分:4)

对于swift 3覆盖preferredStatusBarStyle变量,请使用:

 override var preferredStatusBarStyle: UIStatusBarStyle{
    return .lightContent
}

答案 9 :(得分:2)

现有的答案很棒,但现在新的更新有点不同了!

override var现在代替override func让任何人感到困惑 - 要点仍然相同,您仍然需要更改您的信息列表&#39;:

override var preferredStatusBarStyle: UIStatusBarStyle 
{    
    //LightContent
    return UIStatusBarStyle.lightContent

    //Default
    //return UIStatusBarStyle.default
}

答案 10 :(得分:0)

如果您想在应用内不时更改它,可以使用前面提到的覆盖preferredStatusBarStyle()

请确保在致电setNeedsStatusBarAppearanceUpdate()后致电preferredStatusBarStyle(),然后通知IOS。