我现在已经搜索了一段时间,我只找到了描述在一个视图控制器上改变颜色而不是所有视图控制器的答案。
有可能吗?
答案 0 :(得分:4)
在equals
:
AppDelegate.swift
并将以下代码添加到func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarStyle = .lightContent
return true
}
:
Info.plist
答案 1 :(得分:2)
首先在 info.plist 中将基于控制器的状态栏外观设置为否
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) {
statusBar.backgroundColor = UIColor.blue
}
UIApplication.shared.statusBarStyle = .lightContent
return true
}
答案 2 :(得分:1)
您可以在应用程序启动期间或视图控制器的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
}
}
结果如下:
以下是关于状态栏更改的Apple Guidelines/Instruction。只有黑暗&状态栏中允许亮(同时为黑色)。
以下是 - 如何更改状态栏样式:
如果要设置状态栏样式,应用程序级别,请在“.plist”文件中将UIViewControllerBasedStatusBarAppearance
设置为NO
。
或者以编程方式,您可以从app delegate:
执行此操作func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.statusBarStyle = .lightContent
return true
}
如果您要在视图控制器级别设置状态栏样式,请按照以下步骤操作:
UIViewControllerBasedStatusBarAppearance
文件中将YES
设置为.plist
。 在viewDidLoad添加功能 - setNeedsStatusBarAppearanceUpdate
覆盖视图控制器中的preferredStatusBarStyle。
-
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
根据状态栏样式设置级别设置.plist的值。
答案 3 :(得分:1)
只需两个步骤即可更改整个应用程序的状态栏样式。
向项目的Info.plist
文件添加新属性,并将其设置为false
。
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
转到项目的目标,然后在常规/部署信息下,将Status Bar Style
从Default
切换到Light
。
执行这些步骤将确保状态栏在整个项目中的行为相同。
答案 4 :(得分:0)
是, 步骤1: 打开info.plist并将名为“View controller-based status bar appearance”的新密钥插入NO
第2步:
打开要更改statusBarStyle的viewcontroller
文件,并将以下代码放入viewWillAppear()
,
UIApplication.shared.statusBarStyle = .lightContent
第3步:
此外,为该特定viewController实现viewWillDisappear()
方法并添加以下代码行,
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
一切顺利
答案 5 :(得分:0)
了解自定义状态栏的两种方法非常重要。
是否可以更改所有视图控制器的状态栏颜色?
布尔答案是是,但以合法方式,它非常接近否,如果您需要颜色,则回答“是”是挑衅性的其他黑色或白色。
自定义状态栏外观有两种方法。
在info.plist中,您可以找到或创建一个名为
的密钥 View controller-based status bar appearance
并将其设置为否。
它做什么?它基本上建立了一个设置,表明在您的应用程序中,状态栏外观不是由每个视图控制器单独定义。理解这一点非常重要。这意味着您可以为所有屏幕设置整个应用程序的统一设置。这就是你需要的。但。您仅限于两种设置:白色和黑色。并且您无法使用文档化的API对其进行自定义。
进行设置:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.statusBarStyle = .lightContent
return true
}
这是相反的。要使其工作,请继续info.plist并设置
View controller-based status bar appearance
到是
这样,每当打开一个新的视图控制器时,如果您在所需的每个UIViewController
实例中插入此实现,则会单独设置状态栏样式:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
您与第一个相同,为状态栏设置深色或浅色。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
if let statusbar = value(forKey: "statusBar") as? UIView {
statusbar.backgroundColor = UIColor.blue
}
return true
}
为什么要破解?如果您需要状态栏颜色而不是黑色或白色。在这里,您使用未记录的API。使用KVC获取statusBar对象并手动设置其颜色。这很脏,不合法,但到目前为止,它是为状态栏设置自定义颜色的唯一方法。它可能会导致您的应用被拒绝。但也许你很幸运。为了一劳永逸地设置它,您需要将上述标志设置为NO,以便状态栏不会使用每个视图控制器初始化其样式。
答案 6 :(得分:0)
extension UINavigationController {
override open var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}