我正在使用一个选择器视图,允许用户为整个应用程序选择颜色主题。

我计划改变导航栏的颜色,背景和可能的标签栏(如果可能的话)。

我一直在研究如何做到这一点,但找不到任何Swift的例子。谁能给我一个代码的例子,我需要用来改变导航栏的颜色和导航栏的文本颜色?

选取器视图已经设置好,我正在寻找更改UI颜色的代码。


当前回答

在Swift 2中

在导航栏中更改颜色,

navigationController?.navigationBar.barTintColor = UIColor.whiteColor()

在项目导航栏中更改颜色,

navigationController?.navigationBar.tintColor = UIColor.blueColor()

or

navigationController!.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.blueColor()]

其他回答

我写这篇文章是为了那些仍然对这里的解决方案有问题的人。

我使用的是Xcode版本11.4 (11E146)。为我工作的是:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.tintColor = UIColor.black

但是!如果你将storyboard中的barTintColor设置为“default”以外的任何值,这两行代码将不起作用。

小心,在Storyboard中设置回默认的barTintColor。 哦,苹果……

Swift 5,一个简单的UINavigationController扩展方法。在这个答案的底部是扩展和预览。

第一个视图控制器(Home):

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    navigationController?.setTintColor(.white)
    navigationController?.backgroundColor(.orange)
}

第二个视图控制器(详细信息):

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.transparentNavigationBar()
    navigationController?.setTintColor(.black)
}

UINavigationController的扩展:

extension UINavigationController {
    func transparentNavigationBar() {
        self.navigationBar.setBackgroundImage(UIImage(), for: .default)
        self.navigationBar.shadowImage = UIImage()
        self.navigationBar.isTranslucent = true
    }

    func setTintColor(_ color: UIColor) {
        self.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: color]
        self.navigationBar.tintColor = color
    }

    func backgroundColor(_ color: UIColor) {
        navigationBar.setBackgroundImage(nil, for: .default)
        navigationBar.barTintColor = color
        navigationBar.shadowImage = UIImage()
    }
}

故事板视图:

预览:

斯威夫特3

你可以在ViewDidLoad()中使用简单的一行代码

//Change Color
    self.navigationController?.navigationBar.barTintColor = UIColor.red
//Change Text Color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

在故事板上执行此操作(接口构建器检查器)

在IBDesignable的帮助下,我们可以为UINavigationController添加更多的界面生成器检查器选项,并在故事板上调整它们。首先,将以下代码添加到项目中。

@IBDesignable extension UINavigationController {
    @IBInspectable var barTintColor: UIColor? {
        set {
            guard let uiColor = newValue else { return }
            navigationBar.barTintColor = uiColor
        }
        get {
            guard let color = navigationBar.barTintColor else { return nil }
            return color
        }
    }
}

然后在storyboard上简单地设置导航控制器的属性。

这个方法也可以用于管理故事板中导航栏文本的颜色:

@IBInspectable var barTextColor: UIColor? {
  set {
    guard let uiColor = newValue else {return}
    navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: uiColor]
  }
  get {
    guard let textAttributes = navigationBar.titleTextAttributes else { return nil }
    return textAttributes[NSAttributedStringKey.foregroundColor] as? UIColor
  }
}

导航栏:

navigationController?.navigationBar.barTintColor = UIColor.green

用你想要的任何UIColor替换greenColor,如果你喜欢,你也可以使用RGB。

导航栏文本:

navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.orange]

用你喜欢的颜色替换orangeColor。

标签栏:

tabBarController?.tabBar.barTintColor = UIColor.brown

标签栏文本:

tabBarController?.tabBar.tintColor = UIColor.yellow

最后两个,用你选择的颜色替换brownColor和yellowColor。