UIApplication.sharedApplication().setStatusBarStyle() 在 iOS 9 中已弃用
UIApplication.sharedApplication().setStatusBarStyle() deprecated in iOS 9
我一直在用
UIApplication.sharedApplication().setStatusBarStyle()
在我的 appDelegate 中,它运行良好,但自 iOS 9 起,此方法已被弃用,我找不到替代方法。
我想将整个应用程序的状态栏样式更改为 .LightContent,
但是 xCode 给我的唯一建议是在每个 VC 中单独处理这个问题;
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
有谁知道如何为整个应用程序执行此操作?
提前致谢
这是 AppDelegate 中的新方法:
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
我想我找到了解决办法。
我最终设置了
View controller-based status bar appearance
布尔值到 NO
在我的 info.plist 文件中。
然后我去了目标的 General settings -> Deployment info
并更改了下拉选项
Status Bar Style
到 Light
而不是 Default
这将我整个应用程序的状态栏样式更改为 Light
,这正是我想要的。
希望对您有所帮助!
我在 Xcode 7.
中工作得很好
在 AppDelegate 中:
UIApplication.sharedApplication().statusBarStyle = .LightContent
在info.plist中,设置:
View controller-based status bar appearance
布尔值到 NO
在 app delegate 的 didFinishLaunchingWithOptions
中,使用函数参数 application
(而不是 [UIApplication sharedApplication]
或类似 swift 中的 UIApplication.sharedApplication()
)来设置它所以:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
application.statusBarStyle = UIStatusBarStyleLightContent;
}
在swift3.
在您的视图控制器中:
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
如果您希望应用 运行 您的启动屏幕在 lightContent 中也有状态栏,那么:
在Swift中3是这样的:
UIApplication.shared.statusBarStyle = .lightContent
对于那些仍在使用 Swift 3 in Xcode 8 的人:
(与上面 Marlon Ruiz 的回答略有不同,不是覆盖函数,而是在 viewDidLoad 中)
override func viewDidLoad() {
super.viewDidLoad()
var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
要在视图控制器上动态更新 UIStatusBarStyle,请使用此方法
这还将删除已弃用的警告
'setStatusBarStyle:' 已弃用:首先在 iOS 9.0 中弃用 - 使用 -[UIViewController preferredStatusBarStyle]
用于调用
[[UIApplication sharedApplication] setStatusBarStyle:style];
让我们开始吧
Objective - C
定义UtilityFunction
+(void)setStatusBarStyle:(UIStatusBarStyle )style {
[[NSUserDefaults standardUserDefaults] setInteger:style forKey:@"UIStatusBarStyle"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
在你的 BaseViewController
中覆盖这个方法
- (UIStatusBarStyle)preferredStatusBarStyle {
UIStatusBarStyle style = [[NSUserDefaults standardUserDefaults] integerForKey:@"UIStatusBarStyle"];
return style;
}
使用 UtilityFunction 为 AnyViewController 设置 UIStatusBarStyle 值,如下所示:
[UtilityFunctions setStatusBarStyle:UIStatusBarStyleDefault];
// call below code for preferred style
[self preferredStatusBarStyle];
Swift 4.0
定义UtilityFunction
class func setPreferedStyle(style:UIStatusBarStyle)->Void {
UserDefaults.standard.set(style, forKey: "UIStatusBarStyle")
UserDefaults.standard.synchronize()
}
在你的 BaseViewController
中覆盖这个方法
override var preferredStatusBarStyle: UIStatusBarStyle {
if let style: UIStatusBarStyle = UIStatusBarStyle(rawValue:UserDefaults.standard.integer(forKey: "UIStatusBarStyle")) {
return style
}
return UIStatusBarStyle.lightContent
}
使用 UtilityFunction 为 AnyViewController 设置 UIStatusBarStyle 值,如下所示:
Utility.setPreferedStyle(style: .lightContent)
// call below code for preferred style
preferredStatusBarStyle()
Swift5,iOS13.5+
我要回顾一下,希望对您有所帮助。
#1:不使用 preferredStatusBarStyle
的一般解决方案
要回答这个问题,如果我们不想关心异常屏幕并且不使用来自视图控制器的 preferredStatusBarStyle
属性 作为 Apple建议,我认为确实将 UIViewControllerBasedStatusBarAppearance
设置为 false
并将 General settings -> Deployment info
下的 Status Bar Style
更改为亮灯,正如@Rick 已经推荐的那样,是可行的方法。
#2:使用preferredStatusBarStyle
对于我的情况,我希望能够将 UIStatusBarStyle.lightContent
作为默认值,但某些屏幕具有 UIStatusBarStyle.default
;在这种情况下,解决方案 #1 是不可能的。
由于对 UIViewController
也有一个允许更改默认值的通用扩展,显然对于这个 属性 是不可能的,如果我们不这样做,那么在这些情况下唯一也是最好的方法不想使用已弃用的方法,是通过 inheritance.
因此,一种可能性是让控制器继承自 BaseViewController
(以及 BaseNavigationController
,如果你使用的话),将 preferredStatusBarStyle
设置为 .lightContent
.
通过这种方法,现在您只需在需要的地方将样式设置为 default
,同时将 lightContent
保持为默认值。
我一直在用
UIApplication.sharedApplication().setStatusBarStyle()
在我的 appDelegate 中,它运行良好,但自 iOS 9 起,此方法已被弃用,我找不到替代方法。
我想将整个应用程序的状态栏样式更改为 .LightContent, 但是 xCode 给我的唯一建议是在每个 VC 中单独处理这个问题;
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return .LightContent
}
有谁知道如何为整个应用程序执行此操作?
提前致谢
这是 AppDelegate 中的新方法:
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
我想我找到了解决办法。 我最终设置了
View controller-based status bar appearance
布尔值到 NO
在我的 info.plist 文件中。
然后我去了目标的 General settings -> Deployment info
并更改了下拉选项
Status Bar Style
到 Light
而不是 Default
这将我整个应用程序的状态栏样式更改为 Light
,这正是我想要的。
希望对您有所帮助!
我在 Xcode 7.
中工作得很好在 AppDelegate 中:
UIApplication.sharedApplication().statusBarStyle = .LightContent
在info.plist中,设置:
View controller-based status bar appearance
布尔值到 NO
在 app delegate 的 didFinishLaunchingWithOptions
中,使用函数参数 application
(而不是 [UIApplication sharedApplication]
或类似 swift 中的 UIApplication.sharedApplication()
)来设置它所以:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
application.statusBarStyle = UIStatusBarStyleLightContent;
}
在swift3.
在您的视图控制器中:
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
如果您希望应用 运行 您的启动屏幕在 lightContent 中也有状态栏,那么:
在Swift中3是这样的:
UIApplication.shared.statusBarStyle = .lightContent
对于那些仍在使用 Swift 3 in Xcode 8 的人:
(与上面 Marlon Ruiz 的回答略有不同,不是覆盖函数,而是在 viewDidLoad 中)
override func viewDidLoad() {
super.viewDidLoad()
var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
要在视图控制器上动态更新 UIStatusBarStyle,请使用此方法
这还将删除已弃用的警告
'setStatusBarStyle:' 已弃用:首先在 iOS 9.0 中弃用 - 使用 -[UIViewController preferredStatusBarStyle]
用于调用
[[UIApplication sharedApplication] setStatusBarStyle:style];
让我们开始吧
Objective - C
定义UtilityFunction
+(void)setStatusBarStyle:(UIStatusBarStyle )style {
[[NSUserDefaults standardUserDefaults] setInteger:style forKey:@"UIStatusBarStyle"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
在你的 BaseViewController
中覆盖这个方法- (UIStatusBarStyle)preferredStatusBarStyle {
UIStatusBarStyle style = [[NSUserDefaults standardUserDefaults] integerForKey:@"UIStatusBarStyle"];
return style;
}
使用 UtilityFunction 为 AnyViewController 设置 UIStatusBarStyle 值,如下所示:
[UtilityFunctions setStatusBarStyle:UIStatusBarStyleDefault];
// call below code for preferred style
[self preferredStatusBarStyle];
Swift 4.0
定义UtilityFunction
class func setPreferedStyle(style:UIStatusBarStyle)->Void {
UserDefaults.standard.set(style, forKey: "UIStatusBarStyle")
UserDefaults.standard.synchronize()
}
在你的 BaseViewController
中覆盖这个方法override var preferredStatusBarStyle: UIStatusBarStyle {
if let style: UIStatusBarStyle = UIStatusBarStyle(rawValue:UserDefaults.standard.integer(forKey: "UIStatusBarStyle")) {
return style
}
return UIStatusBarStyle.lightContent
}
使用 UtilityFunction 为 AnyViewController 设置 UIStatusBarStyle 值,如下所示:
Utility.setPreferedStyle(style: .lightContent)
// call below code for preferred style
preferredStatusBarStyle()
Swift5,iOS13.5+
我要回顾一下,希望对您有所帮助。
#1:不使用 preferredStatusBarStyle
要回答这个问题,如果我们不想关心异常屏幕并且不使用来自视图控制器的 preferredStatusBarStyle
属性 作为 Apple建议,我认为确实将 UIViewControllerBasedStatusBarAppearance
设置为 false
并将 General settings -> Deployment info
下的 Status Bar Style
更改为亮灯,正如@Rick 已经推荐的那样,是可行的方法。
#2:使用preferredStatusBarStyle
对于我的情况,我希望能够将 UIStatusBarStyle.lightContent
作为默认值,但某些屏幕具有 UIStatusBarStyle.default
;在这种情况下,解决方案 #1 是不可能的。
由于对 UIViewController
也有一个允许更改默认值的通用扩展,显然对于这个 属性 是不可能的,如果我们不这样做,那么在这些情况下唯一也是最好的方法不想使用已弃用的方法,是通过 inheritance.
因此,一种可能性是让控制器继承自 BaseViewController
(以及 BaseNavigationController
,如果你使用的话),将 preferredStatusBarStyle
设置为 .lightContent
.
通过这种方法,现在您只需在需要的地方将样式设置为 default
,同时将 lightContent
保持为默认值。