Ios 如何使用swift在一个视图控制器中更改状态栏颜色?
我用这个来改变所有应用程序中的状态栏。但现在我只需要在一个视图控制器中将其更改为黑色。如何才能做到这一点?在项目中设置Ios 如何使用swift在一个视图控制器中更改状态栏颜色?,ios,xcode,swift,Ios,Xcode,Swift,我用这个来改变所有应用程序中的状态栏。但现在我只需要在一个视图控制器中将其更改为黑色。如何才能做到这一点?在项目中设置查看基于控制器的状态栏外观。将列表设置为否 使用视图将出现和视图将消失来设置和重置statusBarStyle,同时将属性保留为以前的statusBarStyle,如下所示 UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true) Xcod
查看基于控制器的状态栏外观
。将列表设置为否
使用视图将出现
和视图将消失
来设置和重置statusBarStyle,同时将属性保留为以前的statusBarStyle,如下所示
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
Xcode 8.1,Swift 3解决方案,带@IBDesignable
此解决方案有点不同:
- UIViewController的子类,用于集中逻辑
- viewDidLoad或VIEWDIDLEAM没有代码
- 使用@IBDesignable,以便您可以在情节提要上的属性检查器中设置状态栏颜色
Swift 3.1 仅在View Controller中使用以下代码:
class ViewController: DesignableViewController {
Swift 3 将project.plist中基于视图控制器的状态栏外观设置为“否”
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
或
let color = UIColor(red:0.00, green:0.60, blue:0.48,alpha:1.0)
UINavigationBar.appearance().tintColor = UIColor.blue
UINavigationBar.appearance().barTintColor = color
a
Objective-C
答案:
self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
如果您从公共视图控制器派生了视图控制器,则可以简单地执行以下操作: 步骤1: 将此密钥添加到应用程序的
info.plist
文件中
步骤2:
覆盖公共视图控制器(或父视图控制器
)中的此项
就这样!当你在一个不会被呼叫的导航控制器中时,没有更多的新奇事物。。将调用导航控制器的preferredStatusBarStyle。请将此选项与您的代码一起尝试:
override var preferredStatusBarStyle: UIStatusBarStyle {
if self is YourChildViewController {
return .lightContent
}
return .default
}
并写下:
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .default
}
}
在swit4中,这在我基于导航栏的项目中运行良好
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
你可以使用下面的代码设置状态栏的颜色,它对我有用
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)
谢谢
快乐编码:)可能是Hmm的重复,但应该是。出什么事了?这是我的错。我错过了您的短语“将project.plist中基于视图控制器的状态栏外观设置为NO”。现在它起作用了。非常感谢。很高兴问题解决了,您可能希望将您的问题标记为已回答then@MarkHim当我使用这个并使用标签导航在两个VC之间切换时,它不起作用<代码>UIApplication.shared.setStatusBarStyle(initialStatusBarStyle,动画:true)
在iOS 9中被弃用。您可能需要更新代码。使用UIApplication.shared.statusBarStyle=initialStatusBarStyle
。太好了,谢谢!自动完成没有显示这一点,因为它是一个变量,但它可以100%工作!这太棒了!非常好的解决方案。return.default在这种情况下将永远不会执行
-(void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
override var preferredStatusBarStyle: UIStatusBarStyle {
if self is YourChildViewController {
return .lightContent
}
return .default
}
extension UINavigationController {
open override var preferredStatusBarStyle: UIStatusBarStyle {
return topViewController?.preferredStatusBarStyle ?? .default
}
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
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)