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

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

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

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

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

enter image description here

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

Ответ 1

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

Global Tint option in storyboard

Ответ 2

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

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 =

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

стриж

 override func viewDidLoad() {
     super.viewDidLoad()

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

Ответ 7

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

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

Ответ 8

В 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

Ответ 9

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)

Ответ 10

Swift 3

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

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

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

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

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

Ответ 11

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

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

UINavigationBar.appearance().tintColor = .white

}

Ответ 12

self.navigationController?.navigationBar.tintColor = UIColor.redColor()

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

Ответ 13

Давайте попробуем этот код:

 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
}

Ответ 14

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

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

Ответ 15

Если у вас уже есть кнопка "Назад" в вашем контроллере вида "Настройки", и вы хотите изменить цвет кнопки "Назад" на контроллере вида "Информация о платеже" на что-то еще, вы можете сделать это внутри контроллера "Настройки" для подготовки к 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               
    }
}

Ответ 16

Все настройки ответов 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 на этом радаре гласит, что он поддерживается.

Ответ 17

Добавьте следующий код в функцию 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()]

Ответ 18

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

Ответ 19

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

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

Ответ 20

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

Я сделал это:

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

Ответ 21

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

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

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

Ответ 22

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

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

Ответ 23

Вы должны добавить эту строку

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

Ответ 24

Я предпочитаю настраиваемый 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