Колір тексту смуги, відтінку та заголовка навігації в 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.