Изменить цвет кнопки «Назад» на панели навигации

139

Я пытаюсь изменить цвет кнопки "Настройки" на белый, но не могу изменить его.

Я пробовал оба из них:

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

но без изменений, он все равно выглядит следующим образом:

Изображение 72

Как сделать эту кнопку белой?

Теги:
uinavigationbar
uibarbuttonitem
backbarbuttonitem

22 ответа

184

Вы можете изменить цвет глобального оттенка в раскадровке, щелкнув пустое место на доске и выбрав на правой панели инструментов "Показать инспектор файлов", и вы увидите в нижней части панели инструментов параметр "Глобальный оттенок".

Изображение 1880

  • 4
    Воу .. Хорошая находка !. ты знаешь как это сделать программно?
  • 6
    Отличная находка, но изменение глобального оттенка на белый (согласно исходному вопросу) также изменит такие вещи, как индикаторы раскрытия информации о табличном представлении, на белый, что сделает их невидимыми в рассматриваемой таблице.
Показать ещё 6 комментариев
156

Этот код меняет цвет стрелки

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

Если это не работает, используйте следующий код:

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

Swift 3 Notes

UIColor.whiteColor() и аналогичные были упрощены до UIColor.white

Кроме того, многие ранее неявные опции были изменены на явные, поэтому вам может понадобиться:

self.navigationController?.navigationBar =
  • 4
    self.navigationController?.navigationBar.tintColor = UIColor.whiteColor() работал для меня (Swift 2.2)
  • 0
    self.navigationBar.barStyle = UIBarStyle.Black self.navigationBar.tintColor = UIColor.whiteColor () работал для меня (Swift 3)
Показать ещё 2 комментария
78

Очень легко настроить в раскадровке:

Изображение 1881

Изображение 1882

  • 6
    Спасибо человек, действительно решение для раскадровки.
  • 0
    Отлично, спасибо :)
Показать ещё 2 комментария
38

Вы должны использовать это:

navigationController?.navigationBar.barTintColor = .purple
navigationController?.navigationBar.tintColor = .white
  • 0
    Это сделало кнопку белой, но цвет фона стал намного светлее. Знаете ли вы, как придать фону бара полный цвет?
  • 0
    Я редактировал код выше, я тестировал, и это работает.
Показать ещё 1 комментарий
17

Вы можете использовать как этот. Поместите его внутри 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
    }
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
12

Swift 3

 override func viewDidLoad() {
     super.viewDidLoad()

 self.navigationController?.navigationBar.tintColor = UIColor.white
 }
  • 1
    Используйте в быстрой 3.
  • 1
    Этот код не работает
Показать ещё 8 комментариев
11

В Swift3, чтобы установить кнопку "Назад" на red.

self.navigationController?.navigationBar.tintColor = UIColor.red
  • 0
    это установит панель навигации, а не элемент кнопки панели
  • 1
    Да, это был вопрос.
Показать ещё 1 комментарий
6

Используйте этот код в классе AppDelegate, внутри didFinishLaunchingWithOptions.

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

UINavigationBar.appearance().tintColor = .white

}
6

Swift 3

Самый верный ответ неверен для Swift 3.

Изображение 1883

Правильный код для изменения цвета:

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

Если вы хотите изменить цвет, измените UIColor.white выше на нужный цвет

5

Swift 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)
  • 0
    он меняет цвет для всего приложения. Что, если мне нужно изменить его для определенного экрана / конкретного UINavigationController ?
  • 0
    @VyachaslavGerchicov выше ответ для полной темы приложения, если вы хотите изменить конкретный контроллер. Сделайте что-то вроде этого: let navController = UINavigationController.init (rootViewController: yourViewController) navController.navigationBar.tintColor = .red
5
self.navigationController?.navigationBar.tintColor = UIColor.redColor()

Этот фрагмент делает магию. Вместо redColor измените его по своему желанию.

  • 0
    Спасибо, Суреш, это работает для меня.
4

Если у вас уже есть кнопка "Назад" в вашем контроллере вида "Настройки", и вы хотите изменить цвет кнопки "Назад" на контроллере вида "Информация о платеже" на что-то еще, вы можете сделать это внутри контроллера "Настройки" для подготовки к segue вот так:

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               
    }
}
  • 0
    Это сработало для меня!
4

при использовании swift 2.0

self.navigationController!.navigationBar.tintColor = UIColor.whiteColor();
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 background color
    navigationBarAppearace.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.whiteColor()]  // Title text color

    self.window?.backgroundColor = UIColor.whiteColor()
    return true
}
  • 0
    Большое спасибо, сэр
3

Все настройки ответов UINavigationBar.appearance().tintColor конфликтуют с документацией Apple в UIAppearance.h.

Примечание для iOS7: на tintColor свойство tintColor перемещено в UIView, и теперь имеет специальное наследуемое поведение, описанное в UIView.h. Это унаследованное поведение может конфликтовать с прокси внешнего вида, и поэтому tintColor теперь не 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 на этом радаре гласит, что он поддерживается.

3

Добавьте следующий код в функцию 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()]
  • 0
    Этот код дает мне следующую ошибку: «Использование неразрешенного идентификатора« uicolorFromHex »» Может кто-нибудь помочь мне решить эту проблему?
  • 0
    вероятно, расширение для UIColor. Вы можете искать в stackoverflow, как создать расширение.
2
self.navigationController.navigationBar.tintColor = [UIColor whiteColor];

Это работает для меня, iOS 9.0 +

1

Для 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
}
0

Это будет решено с помощью этой строки в - (void) viewDidLoad:

self.navigationItem.backBarButtonItem.tintColor = UIColor.whiteColor;
  • 0
    (lldb) p self.navigationItem.backBarButtonItem (UIBarButtonItem *) $9 = nil (lldb)
0

Не знаю, почему никто не упомянул об этом... но я делал именно то, что вы делали в моем viewDidLoad... и он не работал. Затем я поместил свой код в viewWillAppear, и все это сработало.

Вышеупомянутое решение состоит в том, чтобы изменить один элемент barbutton. Если вы хотите изменить цвет для каждого навигационного блока в своем коде, выполните этот ответ.

В основном изменение самого класса с помощью appearance() похоже на глобальное изменение во всех экземплярах этого представления в вашем приложении. Подробнее см. здесь

0

У вас есть один выбор, спрячьте свою кнопку назад и сделайте это самостоятельно. Затем установите его цвет.

Я сделал это:

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()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню