Ios UIStatusBarStyle在Swift中不起作用
我正在尝试将我的Swift应用程序中的状态栏颜色更改为白色,但遇到了麻烦。我有3个ViewController,每个都嵌入到NavigationController中(这可能是问题吗?我已经尝试将代码放入NavigationController类中。)我在AppDelegate.swift文件的didFinishLaunchingWithOptions中尝试了以下两段代码,但都不起作用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
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
callself.setNeedsStatusBarAppearanceUpdate()中代码>
覆盖变量preferredStatusBarStyle:UIStatusBarStyle{
return.lightContent
}
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