Колір тексту смуги, відтінку та заголовка навігації в iOS 8


177

Текстовий фон у рядку стану все ще чорний. Як змінити колір на білий?

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

}

введіть тут опис зображення

Відповіді:


312

В AppDelegate.swift, application(_: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, що документи говорять:

Ви можете вказати шрифт, колір тексту, колір тіні тексту та зміщення тіньового тексту для заголовка у словнику текстових атрибутів


6
що робити, якщо у нас є безглузді планки навігації?
Sumit

6
tintColor не працює для Xcode 7.3.1. Текст ще чорний.
triiiiista

1
У Xcode 8.2 titleTextAttributes не заповнюється автоматично, але працює.
okysabeni

чи потрібен barTintColor? видалення цього рядка все ще працює
rgkobashi

122

Мені подобається відповідь Алекса. Якщо ви хочете щось швидко спробувати, 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

1
чому viewWillAppear ()? Я роблю це в viewDidLoad, і це прекрасно працює.
Адам Джонс

4
Тому що кожного разу при перегляді UIView ви хочете, щоб він був встановлений. Якщо ви встановите viewDidLoad (), скажімо, у перегляді UITabBar, перейдіть на іншу вкладку, де вона встановлена ​​ще раз, а потім поверніться, вона буде перезаписана, оскільки початковий вигляд був завантажений лише один раз.
FractalDoctor

2
Оновлення для швидкого 4 - NSForegroundColorAttributeNameтепер має бутиNSAttributedStringKey.foregroundColor
Алан Скарпа

3
Оновлення для Swift 4.2: NSAttributedString.Key.foregroundColorзамістьNSForegroundColorAttributeName
Стефан Пакет

81

Для того, щоб змінити колір повсюдно, цей код повинен сидіти в NavigationController«S viewDidLoadфункції:

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

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

Для того, щоб змінити його на ViewControllerви повинні посилатися на NavigationControllerвід ViewControllerі писати подібні рядки в тому , що ViewController«s viewWillAppearфункції.


Як мені замінити NavigationController для використання цих методів?
AG1

Ви не перекриваєте NavigationController, ви просто модифікуєте його у функції ViewDidLoad. Я оновив свою відповідь вище.
Олексій

1
Тож розробник просто повинен додати NavigationController.swift до робочої області? Якщо так, то акуратно!
AG1

5
@ AG1 Це невірно, просто додавання нового файлу NavigationController.swift недостатньо, ви повинні підключити свій навігаційний контролер у дошці до цього файлу в Інспекторі ідентичності, оскільки за замовчуванням він використовуватиме Generic UINavigationController.
kakubei

2
Ви також можете просто все це зробити на аркуші розкадровки без створення необхідного контролера навігації. Властивості Bar Tine та Style знаходяться праворуч під інспектором атрибутів.
Markymark

31

Швидкий 5

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

Швидкий 4

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

2
Я отримую: Введіть 'NSAttributedStringKey' (він же 'NSString') не має учасника 'foregroundColor'
Альфі

Будь ласка, використовуйте код нижче для останньої версії 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

Але коли я повертаюся до іншого контролера перегляду, колір також змінився. Будь-яка ідея, як цього запобігти. Я хочу, щоб мій головний контролер перегляду був одним кольором, а інший - іншим.
користувач3163404

1
Я думаю, вам також доведеться встановити колір у новому контролері перегляду.
Ніко Клауснітцер

13

Щоб виконати цю роботу в раскадровці (Інспектор побудови інтерфейсу)

За допомогою IBDesignableми можемо додати більше варіантів для Інспектора Інтерфейсу Builder 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

Хоча цей фрагмент коду може вирішити питання, зокрема пояснення дійсно допомагає покращити якість вашої публікації. Пам'ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду.
31пій

4

Swift 4.2 версія відповіді Альберта

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

Для виготовленого на замовлення кольору TitleTextв 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

0

У Swift 3 це працює:

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

0

Швидкий 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]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.