Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UIStatusBarStyle在Swift中不起作用_Ios_Swift_Appdelegate_Uistatusbar_Xcode6 - Fatal编程技术网

Ios UIStatusBarStyle在Swift中不起作用

Ios UIStatusBarStyle在Swift中不起作用,ios,swift,appdelegate,uistatusbar,xcode6,Ios,Swift,Appdelegate,Uistatusbar,Xcode6,我正在尝试将我的Swift应用程序中的状态栏颜色更改为白色,但遇到了麻烦。我有3个ViewController,每个都嵌入到NavigationController中(这可能是问题吗?我已经尝试将代码放入NavigationController类中。)我在AppDelegate.swift文件的didFinishLaunchingWithOptions中尝试了以下两段代码,但都不起作用 application.statusBarStyle = .LightContent 及 文档要说的是UIB

我正在尝试将我的Swift应用程序中的状态栏颜色更改为白色,但遇到了麻烦。我有3个ViewController,每个都嵌入到NavigationController中(这可能是问题吗?我已经尝试将代码放入NavigationController类中。)我在AppDelegate.swift文件的didFinishLaunchingWithOptions中尝试了以下两段代码,但都不起作用

application.statusBarStyle = .LightContent

文档要说的是UIBarButtonStyle是一个Int,它给了我这个枚举片段,这对我的实现没有任何帮助

enum UIStatusBarStyle : Int {
    case Default
    case LightContent
    case BlackOpaque
}
我错过了什么?

你有两个选择

如果要继续手动设置状态栏的样式,请继续执行您正在执行的操作,但需要将以下键添加到info.plist文件中,其值为
NO

基于视图控制器的状态栏外观

或者,如果要继续使用基于视图控制器的状态栏外观,而不是设置应用程序的statusBarStyle,请覆盖要为其指定状态栏样式的每个视图控制器中的
preferredStatusBarStyle
属性

Swift 3

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}
Swift 2

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}
您必须设置:

navigationController.navigationBar.barStyle=.black


对于iOS9.x和Xcode7,文本将以白色显示,只需将其放入AppDelegate.swift中即可:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    UINavigationBar.appearance().barStyle = .Black

} 
这将自动将UINavigationController中所有视图控制器的状态栏样式转换为
.Lightcontent

(另外,从Info.plist中删除
查看基于控制器的状态栏外观
,以抑制您可能也看到的警告!)

Swift 3.0

在AppDelegate.swift中,使用选项完成启动

UIApplication.shared.statusBarStyle = .lightContent
UIApplication.sharedApplication().statusBarStyle = .LightContent
Info.plist

View controller-based status bar appearance -> NO
View controller-based status bar appearance -> NO
Swift 2.2

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}
在AppDelegate.swift中,使用选项完成启动

UIApplication.shared.statusBarStyle = .lightContent
UIApplication.sharedApplication().statusBarStyle = .LightContent
Info.plist

View controller-based status bar appearance -> NO
View controller-based status bar appearance -> NO
在iOS 9上,以下(setStatusBarStyle)已被弃用,如果这样做,您将收到警告

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
如果要在一次快照中更改所有状态栏,请尝试将以下内容添加到Info.plist。这也将使您的启动屏幕状态栏变为白色。而上面的代码不会

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
UIStatusBarStyle
UIStatusBarStyleLightContent
UIViewControllerBasedStatusBarAppearance

不要编辑您的Info.plist。将其添加到ViewController.swift:

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

在Swift 3中,状态栏样式已更改为UIViewController中的计算属性,您可以这样覆盖该属性:

override var preferredStatusBarStyle: UIStatusBarStyle {
   return .lightContent //or default
} 

对我来说,除非我加上:

self.navigationController?.navigationBar.barStyle = .black;
因此:

  • .plist中将
    UIViewControllerBasedStatusBarAppearance
    设置为
    YES
  • viewDidLoad
    call
    self.setNeedsStatusBarAppearanceUpdate()中
  • 覆盖preferredStatusBarStyle
    覆盖变量preferredStatusBarStyle:UIStatusBarStyle{
    return.lightContent
    }
  • 在overrided方法中,我还将
    navigationBar.barStyle
    so设置为final
    对于灯光内容:
    覆盖变量preferredStatusBarStyle:UIStatusBarStyle{
    self.navigationController?.navigationBar.barStyle=.black;//或默认值
    return.lightContent//或默认值
    }

    对于黑色内容,使用默认设置
  • 来源于和

    如果这不起作用,您可以尝试添加
    UINavigationController
    扩展名

    extension UINavigationController
    {
        override open var preferredStatusBarStyle: UIStatusBarStyle {
            if let lastVC = self.viewControllers.last
            {
                return lastVC.preferredStatusBarStyle
            }
    
            return .default
        }
    }
    

    在Swift 3.0中,您可以在ViewController中为基于视图控制器的状态栏外观覆盖getter:

    override var preferredStatusBarStyle: UIStatusBarStyle {
        get { return .lightContent }
    }
    

    奇怪的是,使用Swift 3.1和XC8.2.1,但所有这些都不起作用

    我所做的只是

    extension UINavigationController
    {
        override open var preferredStatusBarStyle: UIStatusBarStyle {
            get {
                return .lightContent
            }
        }
    }
    
    没有Plist,没有其他东西。
    第1步。添加到info.plist
    查看基于控制器的状态栏外观->否

    第二步。在需要更改状态栏颜色的方法中添加代码:

    UIApplication.shared.statusBarStyle = .lightContent //(or .default)
    setNeedsStatusBarAppearanceUpdate()
    

    代码的关键行:
    setNeedsStatusBarAppearanceUpdate()

    我已经尝试了这个代码。。。但我只在第一个屏幕上看到白色的状态栏。。我没有获得其余屏幕的状态栏:(…有任何帮助吗?您必须将plist中的“基于视图控制器的状态栏外观”设置设置为“是”。只有在您希望使用基于视图控制器的状态栏外观时,才会这样做。在iOS 10(Swift 3.0)中它不再是方法而是属性。请参阅:仅用于一个屏幕谢谢。iOS9中似乎存在严重错误。这是我将状态栏变成初始VC白色的唯一方法。我尝试了所有方法。我将提交一个radar.preferredStatusBarStyle,返回UIStatusBarStyleDefault,但不将lightcontent更新为特定viewcon的darkcontenttroller.After self.navigationController.navigationBar.barStyle=UIBarStyleDefault;在视图中对我有效。希望此评论能帮助其他人。请注意,在Swift 3Thanks中,UIStatusBarStyle已更改为“.black”(小写B)!即使覆盖func preferredStatusBarStyle()->UIStatusBarStyle,也没有任何帮助{返回UIStatusBarStyle.LightContent}这真的很有帮助:navigationController.navigationBar.barStyle=.BlackTransparent navigationController.navigationBar.Transparent=trueThank!你救了我一天。但是,BlackTransparent已被弃用。因此,我使用了navigationController.navigationBar.barStyle=.Black。它与
    覆盖变量preferredStatusBarStyle:UIStat>完美配合使用usBarStyle{return.lightContent}
    。您只需在
    viewdiload
    中为wrok编写这一行。确保使用此解决方案保持
    View controller-based status bar-appearance=YES
    。似乎有点过头了……只是在Info.plist文件中尝试了一下,并按照如下方式工作:1.状态栏样式->UIStatusBarStyleLightContent 2.View controller-based status-bar外观->移动此更改使我的后退按钮消失。这是完美的答案:)Perfec