状态栏样式 - Swift 3 - 随时更改

4

我发现在编程中很难改变状态栏的样式。

我知道可以使用以下组合(在ViewController.swift中)为每个视图控制器静态设置它:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.default
}

同时(在info.plist中):

View controller-based status bar appearance = YES

我希望什么时候都能修改它!

3个回答

7

经过一番搜索,我找到了答案!

info.plist 中设置:

View controller-based status bar appearance = NO

并且在 ViewController.swift 文件中删除以下内容:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.default
}

现在你可以在 ViewController.swift 中使用如下代码:
UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: true)

而且,要为每个视图控制器最初设置样式,请使用viewDidAppear:

override func viewDidAppear(_ animated: Bool) {
    UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: false)
}

3
在iOS 9中,这似乎已经被弃用,并建议使用UIViewController - preferredStatusBarStyle来代替。但我无法让它起作用。你找到解决方法了吗? - henrik-dmg
尝试在Info.plist中设置“View controller-based status bar appearance = YES”,然后在每个视图控制器中覆盖preferredStatusBarStyle变量 :) - Chris Allinson
@iOSwarrior 当你的视图中有导航栏时,它不起作用。请改用"UIApplication.shared.statusBarStyle = .default"。 - Hanushka Suren
1
@ChrisAllinson 我的意思是,这个 .setStatusBarStyle(UIStatusBarStyle.lightContent, animated: false) 调用在 iOS 9 中已经被弃用,所以我无法弄清楚如何在覆盖它后再次更改状态栏样式,初始设置很清楚,但我想要动态更改它,例如根据屏幕亮度。 - henrik-dmg

7

Swift 3

1.在info.plist文件中,将View controller-based status bar appearance改为NO

2.在appDelegate.swift文件中,修改didFinishLaunchingWithOptions方法

UIApplication.shared.statusBarStyle = .lightContent

statusBarStyle 在 iOS 9 中已被弃用。 - shim

0

将状态栏样式作为视图控制器的属性存储:

var statusBarStyle: UIStatusBarStyle = .default

然后在同一个视图控制器中实现preferredStatusBarStyle

override var preferredStatusBarStyle: UIStatusBarStyle {
    return statusBarStyle
}

当你改变statusBarStyle时,确保同时调用setNeedsStatusBarAppearanceUpdate。当视图出现/消失时,preferredStatusBarStyle方法会自动调用,但如果在视图可见时更改状态栏样式,则必须告诉视图控制器需要更新状态栏外观。

请注意,您仍然需要对plist进行更改,如果您的视图控制器在导航控制器中,则可能需要在那里处理状态栏更改(例如通过UINavigationController子类)。

UIApplication.shared.setStatusBarStyle(…)在iOS 9.0中已被弃用,因此不要使用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接