preferredStatusBarStyle 不工作
preferredStatusBarStyle is not working
我曾经在我的项目中使用 setStatusBarStyle
,它工作正常,但它已被弃用,所以我使用 preferredStatusBarStyle
,但没有用。
知道我已经:
- 调用方法setNeedsStatusBarAppearanceUpdate。
- 在 info.plist
中将 "View controller-based status bar appearance" 设置为否
覆盖函数
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
这个函数没有被调用
注意:我正在使用导航控制器。
这里是Apple Guidelines/Instruction关于状态栏的变化。
如果你想设置状态栏样式,应用级别然后在你的.plist
文件中设置UIViewControllerBasedStatusBarAppearance
到NO
。并在您的 appdelegate
> didFinishLaunchingWithOptions
中添加以下代码(您可以通过应用程序委托以编程方式完成)。
Objective C
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
Swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.statusBarStyle = .lightContent
return true
}
如果要设置状态栏样式,请在视图控制器级别执行以下步骤:
- 如果您只需要在 UIViewController 级别设置状态栏样式,请在
.plist
文件中将 UIViewControllerBasedStatusBarAppearance
设置为 YES
。
在viewDidLoad中添加函数——setNeedsStatusBarAppearanceUpdate
在您的视图控制器中覆盖 preferredStatusBarStyle。
Objective C
- (void)viewDidLoad
{
[super viewDidLoad];
[self setNeedsStatusBarAppearanceUpdate];
}
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Swift
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
根据状态栏样式设置级别设置.plist的值。
您可以在应用程序启动期间或视图控制器的 viewDidLoad 期间为状态栏设置背景颜色。
extension UIApplication {
var statusBarView: UIView? {
return value(forKey: "statusBar") as? UIView
}
}
// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
return true
}
}
or
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
}
}
这是结果:
我曾经在我的项目中使用 setStatusBarStyle
,它工作正常,但它已被弃用,所以我使用 preferredStatusBarStyle
,但没有用。
知道我已经:
- 调用方法setNeedsStatusBarAppearanceUpdate。
- 在 info.plist 中将 "View controller-based status bar appearance" 设置为否
覆盖函数
- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleLightContent; }
这个函数没有被调用
注意:我正在使用导航控制器。
这里是Apple Guidelines/Instruction关于状态栏的变化。
如果你想设置状态栏样式,应用级别然后在你的.plist
文件中设置UIViewControllerBasedStatusBarAppearance
到NO
。并在您的 appdelegate
> didFinishLaunchingWithOptions
中添加以下代码(您可以通过应用程序委托以编程方式完成)。
Objective C
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
Swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.statusBarStyle = .lightContent
return true
}
如果要设置状态栏样式,请在视图控制器级别执行以下步骤:
- 如果您只需要在 UIViewController 级别设置状态栏样式,请在
.plist
文件中将UIViewControllerBasedStatusBarAppearance
设置为YES
。 在viewDidLoad中添加函数——
setNeedsStatusBarAppearanceUpdate
在您的视图控制器中覆盖 preferredStatusBarStyle。
Objective C
- (void)viewDidLoad
{
[super viewDidLoad];
[self setNeedsStatusBarAppearanceUpdate];
}
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Swift
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
根据状态栏样式设置级别设置.plist的值。
您可以在应用程序启动期间或视图控制器的 viewDidLoad 期间为状态栏设置背景颜色。
extension UIApplication {
var statusBarView: UIView? {
return value(forKey: "statusBar") as? UIView
}
}
// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
return true
}
}
or
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
}
}
这是结果: