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


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.