如何使用swift在一个视图控制器中更改状态栏颜色?
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) }
Xcode 8.1,带有@IBDesignable的Swift 3解决方案
这个解决方案有点不同:
- UIViewController的子类集中逻辑
- 没有viewDidLoad或viewDidDisappear的代码
- 使用@IBDesignable,以便您可以在故事板上的“属性”检查器中设置状态栏颜色
第1步 – 设置Info.plist文件
第2步 – 子类UIViewController
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 } } } }
第3步 – 从DesignableViewControllerinheritance
从以下位置更改ViewController的代码:
class ViewController: UIViewController {
至:
class ViewController: DesignableViewController {
第4步 – 在故事板上设置您的偏好
选择Storyboard上的ViewControllers并转到Attributes Inspector:
第5步 – 运行项目和测试
在我的项目中,我设置了带有2个视图控制器的标签栏控制器,并在两者之间来回切换。 似乎对我来说工作正常。
解决了:
Swift 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]
如果您从公共视图控制器派生了视图控制器,那么您可以这样做:
第1步:将此密钥添加到您应用的info.plist
文件中。
第2步:在公共视图控制器(或ParentViewController
)中override
它。
override var preferredStatusBarStyle: UIStatusBarStyle { if self is YourChildViewController { return .lightContent } return .default }
而已! 没有更多花哨的东西。