Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用swift在一个视图控制器中更改状态栏颜色?_Ios_Xcode_Swift - Fatal编程技术网

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,以便您可以在情节提要上的属性检查器中设置状态栏颜色
步骤1-Setup Info.plist文件

步骤2-子类UIViewController 步骤3-从DesignableViewController继承 从以下位置更改ViewController的代码:

致:

第4步-在故事板上设置您的首选项 选择情节提要上的ViewController并转到属性检查器:

步骤5-运行项目和测试 在我的项目中,我设置了一个带有两个视图控制器的选项卡栏控制器,并在这两个控制器之间来回切换。对我来说似乎还可以。 已解决:
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)