iOS 8中的NavigationBar栏,色彩和标题文字颜色


179

状态栏中的背景文本仍为黑色。如何将颜色更改为白色?

// io8, swift, Xcode 6.0.1 
override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.navigationBar.barTintColor = UIColor.blackColor()
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orangeColor()]

}

在此处输入图片说明

Answers:


314

在中AppDelegate.swiftapplication(_:didFinishLaunchingWithOptions:)我输入以下内容:

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]

(对于Swift 4或更早版本,请使用NSAttributedStringKey代替NSAttributedString.Key

对于titleTextAttributes文档说:

您可以在文本属性字典中为标题指定字体,文本颜色,文本阴影颜色和文本阴影偏移量


7
如果我们有多个导航栏怎么办?
2016年

6
tintColor不适用于Xcode 7.3.1。文本仍为黑色。
triiiiista

1
在Xcode 8.2中,titleTextAttributes不会自动完成,但是可以工作。
okysabeni

仍然需要barTintColor吗?删除该行仍然有效
rgkobashi

这将添加文本属性。实际上并未更改标题的颜色。如果您注意到文本的字体,您可以理解其中的区别。
Ram Madhavan

123

我喜欢亚历克斯的回答。如果您想快速尝试一下,请ViewController确保使用

viewWillAppear()
override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    var nav = self.navigationController?.navigationBar
    nav?.barStyle = UIBarStyle.Black
    nav?.tintColor = UIColor.white
    nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]
    //nav?.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.orange] // swift 4.2
}

在此处输入图片说明


但我使用的是iso 8.1
Saorikido 2014年

1
为什么要viewWillAppear()?我在viewDidLoad中做到这一点,并且工作正常。
亚当·约翰斯

4
因为每次查看UIView时都希望对其进行设置。如果您在UITabBar视图中在viewDidLoad()中进行设置,请移至另一个选项卡,在该选项卡中再次进行设置,然后回来,因为原始视图仅被加载一次,它将被覆盖。
FractalDoctor 2015年

2
快速更新4-NSForegroundColorAttributeName现在应该是NSAttributedStringKey.foregroundColor
艾伦·斯卡帕

3
Swift 4.2更新:NSAttributedString.Key.foregroundColor代替NSForegroundColorAttributeName
Stephane Paquet,

81

要普遍更改颜色,此代码应位于NavigationControllerviewDidLoad函数中:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Status bar white font
        self.navigationBar.barStyle = UIBarStyle.Black
        self.navigationBar.tintColor = UIColor.whiteColor()
    }
}

要对其进行更改,ViewController您必须从中引用NavigationControllerViewController并在ViewControllerviewWillAppear函数中编写类似的行。


如何重写NavigationController以使用这些方法?
AG1 2014年

您无需覆盖NavigationController,而只需在ViewDidLoad函数中对其进行修改。我在上面更新了我的答案。
2014年

1
因此,开发人员只需要将NavigationController.swift添加到工作区中?如果是这样,那就太整齐了!
2014年

5
@ AG1这是不正确的,仅添加一个新文件NavigationController.swift是不够的,您必须将情节提要中的导航控制器连接到Identity Inspector中的此文件,因为默认情况下它将使用通用UINavigationController。
kakubei 2014年

2
您也可以在情节提要中完成所有这些操作,而无需创建自定义导航控制器。“ Bar Tine”和“样式”的属性在“属性”检查器的右侧。
Markymark

33

迅捷5

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

斯威夫特4

self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]

2
我得到:类型'NSAttributedStringKey'(又名'的NSString')没有成员'foregroundColor'
Ahmadreza

请使用以下代码获取最新版本的xcode 10和Swift 4.2 self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor:UIColor.white]
Bhavsang Jam

16

要在Objective-C中工作,我必须viewWillAppear在CustomViewController中放入以下几行。

[self.navigationController.navigationBar setBarTintColor:[UIColor whiteColor]];
[self.navigationController.navigationBar setTranslucent:NO];

对于Swift2.x,此方法有效:

self.navigationController?.navigationBar.barTintColor = UIColor.redColor()

对于Swift3.x,此方法有效:

self.navigationController?.navigationBar.barTintColor = UIColor.red

但是当我回到另一个视图控制器时,颜色也发生了变化。关于如何防止这种情况的任何想法。我希望主视图控制器是一种颜色,而另一种是其他颜色。
2015年

1
我认为您还必须在新的视图控制器中设置颜色。
Niko Klausnitzer

13

在情节提要中执行此工作(Interface Builder检查器)

借助IBDesignable,我们可以为Interface Builder Inspector添加更多选项,UINavigationController并在情节提要上对其进行调整。首先,将以下代码添加到您的项目中。

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

    @IBInspectable var tintColor: UIColor? {
        set {
            navigationBar.tintColor = newValue
        }
        get {
            guard  let color = navigationBar.tintColor else { return nil }
            return color
        }
    }

    @IBInspectable var titleColor: UIColor? {
        set {
            guard let color = newValue else { return }
            navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: color]
        }
        get {
            return navigationBar.titleTextAttributes?["NSForegroundColorAttributeName"] as? UIColor
        }
    }
}

然后,只需在情节提要上设置UINavigationController的属性即可。

在此处输入图片说明


7

如果要设置整个应用的色泽颜色和条形颜色,可以将以下代码添加到AppDelegate.swift中

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

    var navigationBarAppearace = UINavigationBar.appearance()

    navigationBarAppearace.tintColor = UIColor(red:1.00, green:1.00, blue:1.00, alpha:1.0)
    navigationBarAppearace.barTintColor = UIColor(red:0.76, green:0.40, blue:0.40, alpha:1.0)
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
    return true
`

导航栏设置了TintColor和tintColor


6

迅速更新4

override func viewDidLoad() {
    super.viewDidLoad()
        self.navigationController?.navigationBar.tintColor = UIColor.blue
        self.navigationController?.navigationBar.barStyle = UIBarStyle.black
}

6

在Swift5和Xcode 10中

self.navigationItem.title = "your name"
let textAttributes = [NSAttributedStringKey.foregroundColor:UIColor.white]
navigationController?.navigationBar.titleTextAttributes = textAttributes

尽管此代码段可以解决问题,但提供说明确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
31piy18年

4

Swift 4.2版的Albert的答案-

UINavigationBar.appearance().barTintColor = UIColor(red: 234.0/255.0, green: 46.0/255.0, blue: 73.0/255.0, alpha: 1.0)
UINavigationBar.appearance().tintColor = UIColor.white
UINavigationBar.appearance().titleTextAttributes = [.foregroundColor : UIColor.white]

我真的很喜欢您如何添加此答案。.barTintColor现在不是选项。您是说.backgroundColor吗?

4

在Swift版本4.2中将导航栏标题的文本颜色设置为白色:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

3

斯威夫特4

override func viewDidLoad() {
    super.viewDidLoad()

    navigationController?.navigationBar.barTintColor = UIColor.orange
    navigationController?.navigationBar.tintColor = UIColor.white
    navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]
}

3

斯威夫特4.1

将功能添加到viewDidLoad

override func viewDidLoad() {
  super.viewDidLoad()

  setup()
}   

setup()函数中添加:

func setup() {

        navigationController?.navigationBar.prefersLargeTitles = true
        navigationController?.navigationBar.barStyle = .blackOpaque
        navigationItem.title = "YOUR_TITLE_HERE"
        navigationController?.navigationBar.barTintColor = .black
        let attributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
        navigationController?.navigationBar.largeTitleTextAttributes = attributes
    }

1

对于TitleTextat的自定义颜色NavigationBar,这里是Swift 3的简单代码:

UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName : UIColor.white]

要么

navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName :UIColor.white]

1

在Swift 4.2中

var nav = self.navigationController?.navigationBar
nav?.barStyle = UIBarStyle.Black
nav?.tintColor = UIColor.white
nav?.titleTextAttributes = [NSForegroundColorAttributeName: UIColor.orange]

1

通过Swift 3.2快速升级(不是Swift 4.0)

    self.navigationController?.navigationItem.largeTitleDisplayMode = .always
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationController?.navigationBar.largeTitleTextAttributes = [NSForegroundColorAttributeName: UIColor.white]

    // unconfirmed but I assume this works:
    self.navigationController?.navigationBar.barTintColor = UIColor.white
    self.navigationController?.navigationBar.barStyle = UIBarStyle.black

1

迅捷5.1

仅复制并粘贴,ViewDidLoad()然后根据需要更改其大小。复制和粘贴之前,在屏幕顶部添加导航栏。

navigationController?.navigationBar.titleTextAttributes = [ NSAttributedString.Key.font: UIFont(name: "TitilliumWeb-Bold.ttf", size: 16.0)!, NSAttributedString.Key.foregroundColor: UIColor.white]

如果不起作用,则可以尝试仅更改其文本颜色

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]

0

在Swift 3中,这有效:

navigationController?.navigationBar.barTintColor = UIColor.white
navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.blue]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.