UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
我用这个方法将所有应用程序中的状态栏更改为浅色。但现在我只需要在一个视图控制器中将其更改回黑色。我该如何做到?
将项目的.plist文件中的View controller-based status bar appearance
设置为NO
使用viewWillAppear
和viewWillDisappear
来设置和重置statusBarStyle,同时保留一个先前statusBarStyle的属性,像这样
let initialStatusBarStyle : UIStatusBarStyle
func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
initialStatusBarStyle = UIApplication.sharedApplication().statusBarStyle
UIApplication.sharedApplication().setStatusBarStyle(.LightContent, animated: animated)
}
func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().setStatusBarStyle(initialStatusBarStyle, animated: animated)
}
UIApplication.shared.setStatusBarStyle(initialStatusBarStyle, animated: true)
在iOS 9中已经被弃用。您可能需要更新您的代码。请使用 UIApplication.shared.statusBarStyle = initialStatusBarStyle
。 - Cesare这个解决方案有点不一样:
import UIKit
@IBDesignable
class DesignableViewController: UIViewController {
@IBInspectable var LightStatusBar: Bool = false
override var preferredStatusBarStyle: UIStatusBarStyle {
get {
if LightStatusBar {
return UIStatusBarStyle.lightContent
} else {
return UIStatusBarStyle.default
}
}
}
}
将您的ViewController(们)的代码从以下内容更改为:
class ViewController: UIViewController {
收件人:
class ViewController: DesignableViewController {
选择Storyboard上的ViewControllers并进入Attribute Inspector:
在我的项目中,我使用Tab Bar控制器设置了两个View Controllers,并在它们之间切换。对我来说似乎工作得很好。
已解决:
Swift 3.1
只需在视图控制器中使用以下代码:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Swift 3
在您的项目.plist中将“基于视图控制器的状态栏外观”设置为NO。
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.setStatusBarStyle(.default, animated: animated)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UIApplication.shared.setStatusBarStyle(.lightContent, animated: animated)
}
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
let color = UIColor(red:0.00, green:0.60, blue:0.48,alpha:1.0)
UINavigationBar.appearance().tintColor = UIColor.blue
UINavigationBar.appearance().barTintColor = color
或者
self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
Swift 5,iOS 14,UIKit
步骤1:添加状态栏样式
步骤2:更改Info.Plist中的设置
添加“View controller-based status bar appearance”键,其值为NO
步骤3:在您的基本视图控制器中添加此扩展
extension UIViewController
{
func setStatusBarColor(){
if #available(iOS 13, *)
{
let window = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
let statusBarFrame = window?.windowScene?.statusBarManager?.statusBarFrame
let statusBar = UIView(frame: (statusBarFrame)!)
statusBar.backgroundColor = .orange
window?.addSubview(statusBar)
} else {
// ADD THE STATUS BAR AND SET A CUSTOM COLOR
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) {
statusBar.backgroundColor = .orange
}
UIApplication.shared.statusBarStyle = .lightContent
}
}
}
步骤4:在您的视图控制器中使用此扩展
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
setStatusBarColor()
}
let app = UIApplication.shared
let statusBarHeight: CGFloat = app.statusBarFrame.size.height
let statusbarView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: statusBarHeight))
statusbarView.backgroundColor = UIColor.red
view.addSubview(statusbarView)
您可以使用以下代码设置状态栏颜色,这对我有效:
self.navigationController?.SetStatusBar(StatusBarbackgroundColor: ThemeBackColor, StatusTextColor: .black)
谢谢 愉快的编程 :)
return .default
将永远不会被执行。 - Amit