【发布时间】:2016-05-05 20:50:34
【问题描述】:
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
我用这个来改变所有应用程序中的状态栏。但现在我只需要在一个 View Controller 中将它改回黑色。我该怎么做?
【问题讨论】:
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
我用这个来改变所有应用程序中的状态栏。但现在我只需要在一个 View Controller 中将它改回黑色。我该怎么做?
【问题讨论】:
在你的 project.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 。
这个解决方案有点不同:
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(s) 的代码:
class ViewController: UIViewController {
收件人:
class ViewController: DesignableViewController {
选择 Storyboard 上的 ViewControllers 并转到 Attributes Inspector:
【讨论】:
已解决:
斯威夫特 3.1
只需在 View Controller 中使用此代码:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
【讨论】:
斯威夫特 3
将 project.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)
}
【讨论】:
Objective-C 回答:
-(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]
【讨论】:
在 swit4 中,这在我基于导航栏的项目中运行良好
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)
谢谢 快乐编码:)
【讨论】:
Swift 5、iOS 14、UIKit
第一步:添加状态栏样式
第 2 步:更改 Info.Plist
添加无值的基于视图控制器的状态栏外观键
第 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()
}
【讨论】:
【讨论】:
return .default 在这种情况下永远不会被执行
当您处于不会被调用的导航控制器中时。导航控制器的 preferredStatusBarStyle 将被调用。与您的代码一起尝试:
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .default
}
}
还要这样写:
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
【讨论】: