Змінення кольору кнопки Назад на панелі навігації


194

Я намагаюся змінити колір кнопки "Налаштування" на білий, але не можу його змінити.

Я спробував обидва:

navigationItem.leftBarButtonItem?.tintColor = UIColor.whiteColor()
navigationItem.backBarButtonItem?.tintColor = UIColor.whiteColor()

але жодних змін, воно все ще виглядає так:

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

Як зробити цю кнопку білою?

Відповіді:


284

Ви можете змінити глобальний колір відтінку на своїй дошці розкадрування, натиснувши порожнє місце на дошці та виберіть на правій панелі інструментів «Показати інспектор файлів», а внизу панелі інструментів ви побачите параметр «Глобальний відтінок».

Варіант глобального відтінку в раскадровці


7
woah .. Приємна знахідка !. чи знаєте ви, як це зробити програмно?
— Пол Лен

10
Чудова знахідка, але зміна глобального відтінку на білий (за оригінальним запитанням) також змінить такі речі, як індикатори розкриття деталей перегляду таблиць на білі, що зробить їх непомітними у відповідній таблиці.
— Майк Фішер

1
Додавання до питань Майка: цей елемент керування також робить усі ваші текстові кнопки цим кольором, і тому вам доведеться або встановити їх вручну (тобто немає кольорів за замовчуванням), або просто використовувати інший метод.
— Сирени

4
Хоча це швидко і легко виправити, це призводить до інших проблем, якщо колір білий / відповідає фону. Якщо у вас є текстові поля, це робить курсор непомітним, завдяки чому він виглядає користувачеві так, ніби він не в змозі записати в текстовому полі, оскільки курсор не видно.
— Хосе Рамірес

5
@PaulLehn Щоб це зробити програмно, AppDelegate.swift > application(application:didFinishLaunchingWithOptions:)ви можете написати:self.window!.tintColor = .yourColor
— mmika1000

206

Цей код змінює колір стрілки

self.navigationController.navigationBar.tintColor = UIColor.whiteColor();

Якщо це не працює, використовуйте код нижче:

self.navigationBar.barStyle = UIBarStyle.Black
self.navigationBar.tintColor = UIColor.whiteColor()

Швидкий 3 Примітки

UIColor.whiteColor() тощо UIColor.white

Також багато раніше неявних необов’язків були змінені на явні, тому вам може знадобитися:

self.navigationController?.navigationBar =

7
self.navigationController?.navigationBar.tintColor = UIColor.whiteColor()працював на мене (Свіфт 2.2)
— Майк Фішер

self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor () працював на мене (Swift 3)
— Ajay.km

Чи можете ви пояснити, чому користуватися UIBarStyle.Black?
— mmika1000

Оновіть: self.navigationController? .NavigationBar.tintColor =
— mohonish

1
вона змінює лише стрілку, зворотній текст все ще залишається тим самим у Xcode 11
— jeff


56

Ви повинні використовувати це:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white

Це зробило кнопку білою, але зробило колір фону набагато світлішим. Чи знаєте ви, як знову надати тло барі повний колір?
— Брендон Еванс

Це правильна відповідь. Це зробить смугу фіолетовим, встановивши барTintColor та кнопки заголовка / смуги білими.
— zirinisp

36

Швидкий

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }

1
Використовуйте в швидкому 3.
— Deepak Tagadiya

також скажіть, яку швидку версію ви можете використовувати?
— Діпак Тагадія

І який клас / файл / vc пише цей код у проекті?
— Діпак Тагадія

На початку функції setCloseButton (), яка викликається у viewWillAppear.
— Джайпракаш Дюбі

пишіть у файл NextViewController.swift, також пишіть у viewDidLoad ().
— Діпак Тагадія

20

Ви можете використовувати як цей. Помістіть його всередину AppDelegate.swift.

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

        UINavigationBar.appearance().translucent = false
        UINavigationBar.appearance().barTintColor = UIColor(rgba: "#2c8eb5")
        UINavigationBar.appearance().tintColor = UIColor.whiteColor()
        UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]

        return true
    }

20

Швидкий 4.2

Змінення повної теми програми

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

        UINavigationBar.appearance().tintColor = .white

        return true
    }

Зміна конкретного контролера

let navController = UINavigationController.init(rootViewController: yourViewController) 
navController.navigationBar.tintColor = .red

present(navController, animated: true, completion: nil)

він змінює колір для всіх застосувань. Що робити, якщо мені потрібно змінити його для конкретного екрана / конкретного UINavigationController?
— Вячаслав Герчич

@VyachaslavGerchicov вище відповідь на повну тему програми, якщо ви хочете змінити конкретний контролер. Зробіть щось подібне: нехай navController = UINavigationController.init (rootViewController: yourViewController) navController.navigationBar.tintColor = .red
— AiOsN

Якщо ви перебуваєте на iOS 13, ви більше не використовуєте didFinishLaunchingWithOptions, його було переміщено до SceneDelegate.
— JBarros35

15

У Swift3 , Щоб встановити кнопку Назад red.

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

тут буде встановлено навігаційну панель, а не пункт кнопки панелі
— carlodonz

1
Так, це було питання.
— Вінсент

"Змінити колір кнопки" Назад " у панелі навігації"
— carlodonz

Це був єдиний метод, який працював на мене. Щось здається, зламане з реалізацією Apple зараз ...
— Дейв Y

13

У Swift 4 ви можете вирішити цю проблему, використовуючи:

let navStyles = UINavigationBar.appearance()
// This will set the color of the text for the back buttons.
navStyles.tintColor = .white
// This will set the background color for navBar
navStyles.barTintColor = .black

8

Швидкий 3

Відповідь, яка найбільше обґрунтовується, не є правильною для Swift 3.

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

Правильний код для зміни кольору:

self.navigationController?.navigationBar.tintColor = UIColor.white

Якщо ви хочете змінити колір, змініть UIColor.white вище на потрібний колір


Це був єдиний метод, який працював на мене. Щось здається, зламане з реалізацією Apple зараз ...
— Дейв Y

7

Усі налаштування відповідей UINavigationBar.appearance().tintColorсуперечать документації Apple в UIAppearance.h.

Примітка для iOS7: В iOS7 tintColorвластивість перемістилося до UIView, і тепер має особливу спадкову поведінку, описану в UIView.h. Ця успадкована поведінка може конфліктувати з проксі-сервером зовнішнього вигляду, і тому tintColorтепер заборонена проксі-сервером.

У Xcode потрібно натиснути команду натиснути на кожне властивість, яке ви хочете використовувати з проксі-сервером зовнішнього вигляду, щоб перевірити файл заголовка та переконатися, що властивість анотовано UI_APPEARANCE_SELECTOR .

Тож правильний спосіб пофарбувати панель навігації у фіолетовий колір, а також заголовок та кнопки білими в додатку через проксі-сервер зовнішнього вигляду:

UINavigationBar.appearance().isTranslucent = false
UINavigationBar.appearance().barTintColor = .purple
UINavigationBar.appearance().titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
UIBarButtonItem.appearance().tintColor = .white

Зауважте, що UIBarButtonItemце не підклас, UIViewа скоріше NSObject. Тож його tintColorвластивість не успадковується tintColorвідUIView .

На жаль, UIBarButtonItem.tintColorце не анотовано UI_APPEARANCE_SELECTOR- але мені здається помилка в документації. Відповідь Apple Engineering на цьому радарі стверджує, що вона підтримується.


UINavigationBar.appearance (). BigTitleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] // також
— Guilherme


6

Використовуйте цей код у AppDelegateкласі, всередині didFinishLaunchingWithOptions.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

UINavigationBar.appearance().tintColor = .white

}

4

Давайте спробуємо цей код:

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

    let navigationBarAppearace = UINavigationBar.appearance()
    navigationBarAppearace.tintColor = UIColor.whiteColor()  // Back buttons and such
    navigationBarAppearace.barTintColor = UIColor.purpleColor()  // Bar's background color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title's text color

    self.window?.backgroundColor = UIColor.whiteColor()
    return true
}

Дуже дякую, сер
— Арпіт Б Парех


4

Якщо у контролера перегляду "Налаштування" у вас вже є кнопка "Назад", і ви хочете змінити колір кнопки "Назад" на контролері перегляду "Інформація про оплату" на щось інше, ви можете зробити це всередині "Налаштування", щоб контролер перегляду виглядав так, як це :

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "YourPaymentInformationSegue"
    {
        //Make the back button for "Payment Information" gray:
        self.navigationItem.backBarButtonItem?.tintColor = UIColor.gray               
    }
}

3
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Це працює для мене, iOS 9.0+


2

Додайте наступний код до функції didFinishLaunchingWithOptions в AppDelegate.swift

var navigationBarAppearace = UINavigationBar.appearance()

navigationBarAppearace.tintColor = uicolorFromHex(0xffffff) // White color
navigationBarAppearace.barTintColor = uicolorFromHex(0x034517) // Green shade

// change navigation item title color
navigationBarAppearace.titleTextAttributes =[NSForegroundColorAttributeName:UIColor.whiteColor()]

Цей код дає мені таку помилку: "Використання невирішеного ідентифікатора" uicolorFromHex "" Чи може хтось допомогти мені вирішити це?
— jonathan3087

ймовірно, розширення для UIColor. Ви можете шукати stackoverflow, як створити розширення.
— KvdLingen

2

Для Swift 2.0 Для зміни Навігаційно-бар відтінок кольору , текст заголовка і кнопки назад відтінок кольору змінений за допомогою наступних в AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

  // Override point for customization after application launch.


    //Navigation bar tint color change

    UINavigationBar.appearance().barTintColor = UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 0.5)

    //Back button tint color change

    UINavigationBar.appearance().barStyle = UIBarStyle.Default
    UINavigationBar.appearance().tintColor =  UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1)

    //Navigation Menu font tint color change

    UINavigationBar.appearance().titleTextAttributes = [NSForegroundColorAttributeName: UIColor(red: 204/255.0, green: 255/255.0, blue: 204/255.0, alpha: 1), NSFontAttributeName: UIFont(name: "OpenSans-Bold", size: 25)!]//UIColor(red: 42/255.0, green: 140/255.0, blue: 166/255.0, alpha: 1.0)

    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent


    return true
}

2

Не впевнений, чому ніхто про це не згадував ... але я робив саме те, що ви робили в мене viewDidLoad... і це не працювало. Тоді я помістив свій код viewWillAppearі все спрацювало.

Вищеописане рішення полягає в зміні одного барбутонаІтем. Якщо ви хочете змінити колір для кожного навігаційного бару у своєму коді, дотримуйтесь цієї відповіді .

В основному перехід на сам клас, який використовується, appearance()- це як глобальна зміна всіх примірників цього перегляду у вашій програмі. Детальніше дивіться тут


1

У вас є один вибір - приховати кнопку спинки і зробити її власноруч. Потім встановіть його колір.

Я зробив це:

self.navigationItem.setHidesBackButton(true, animated: true)
let backbtn = UIBarButtonItem(title: "Back", style:UIBarButtonItemStyle.Plain, target: self, action: "backTapped:")
self.navigationItem.leftBarButtonItem = backbtn
self.navigationItem.leftBarButtonItem?.tintColor = UIColor.grayColor()

1
Питання стосувалося стилізації лівого елемента навігації, і це найближче до прямого відповіді на питання.
— ремесло

0

Це вирішиться за допомогою цього рядка в - (void) viewDidLoad:

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;

(lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
— dengApro

0

Ви повинні додати цей рядок

 self.navigationController?.navigationBar.topItem?.backBarButtonItem?.tintColor = .black

0

Я віддаю перевагу користувальницькому NavigationController, а не встановлювати глобальний інтерфейс або вводити в ViewController.

Ось моє рішення


class AppNavigationController : UINavigationController {

  override func viewDidLoad() {
    super.viewDidLoad()
    self.delegate = self
  }

  override func viewWillAppear(_ animated: Bool) {

  }

}
extension AppNavigationController : UINavigationControllerDelegate {

  func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
    let backButtonItem = UIBarButtonItem(
      title: "   ",
      style: UIBarButtonItem.Style.plain,
      target: nil,
      action: nil)
    backButtonItem.tintColor = UIColor.gray
    viewController.navigationItem.backBarButtonItem = backButtonItem
  }

  func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool) {

  }

}

Крім того, вам не потрібно возитися з Apple Api, як EKEventEditViewController , PickerViewController тощо, якщо ви використовуєте глобальні налаштування, такі якUIBarButtonItem.appearance().tintColor = .white


0
    self.navigationController?.navigationBar.tintColor = UIColor.black // to change the all text color in navigation bar or navigation 
    self.navigationController?.navigationBar.barTintColor = UIColor.white // change the navigation background color
    self.navigationController?.navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.black] // To change only navigation bar title text color
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.