Быстрое изменение шрифта и цвет кнопки "Назад"

Я разрабатываю приложение в Swift 2.2. Теперь я хочу изменить шрифт и цвет кнопки обратной связи для определенного вида. В рассматриваемом представлении есть контроллер навигации в качестве родительского контроллера.

Я попытался запустить обе следующие строки в viewDidLoad моего ViewController

self.navigationController!.navigationItem.backBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)
self.navigationItem.backBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)

Не вызывает ошибок, но это не имеет никакого значения для кнопки "Назад". Я также попытался запустить оба этих

self.navigationController!.navigationItem.leftBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)   
self.navigationItem.leftBarButtonItem!.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal)

Однако это порождает ошибку (ошибка разворачивания нуля). Как правильно изменить шрифт и цвет кнопки панели навигации? Чувствует, что я не изменяю правильные предметы...

Ответ 1

Если вы хотите установить одинаковый цвет на панели кнопок неявно, а затем в appdelegate in didfinishlaunchingwithoption write,

 UINavigationBar.appearance().tintColor = UIColor.whiteColor() //your desired color here

Обновление:

поместите это в appdelegae,

 UIBarButtonItem.appearance().setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Andes Rounded", size: 17)!], forState: .Normal) // your textattributes here

Обновление 2:

  UIBarButtonItem.appearanceWhenContainedInInstancesOfClasses([UINavigationBar.classForCoder()]).setTitleTextAttributes(["attribute" : "value"], forState: .Normal)

Надеюсь, это поможет:)

Ответ 2

Ответ Swift 3.0 (на основе ответа Льва):

let newFont = UIFont(name: "Avenir Next", size: 16.0)!
let color = UIColor.white

UIBarButtonItem.appearance(whenContainedInInstancesOf: [UINavigationBar.classForCoder() as! UIAppearanceContainer.Type]).setTitleTextAttributes([NSForegroundColorAttributeName: color, NSFontAttributeName: newFont], for: .normal)

Работает с удовольствием для тех, кому уже удалось настроить другие части своих навигационных баров, но не кнопку "Назад"!

Ответ 3

Я думаю, вы должны изменить его в vc до вашего фактического vc. Посмотрите: UINavigationItem

Изменить: Например, вы можете написать:

let item = UIBarButtonItem(title: "Text goes here", style: .Plain, target: self, action: #selector(self.navigationController?.popViewControllerAnimated(_:)))

item.setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Helvetica-Bold", size: 23)!], forState: .Normal)

navigationItem.backBarButtonItem = item

в вашем методе prepareForSegue.

Ответ 4

создать пользовательскую кнопку и сделать ее по своему усмотрению и добавить действие для возврата.

func addBackBarButtonOnNavigationBar(){
   // add image here
    let searchImage:UIImage = UIImage(named: "back button image")!

     var backBtn:UIBarButtonItem = UIBarButtonItem(image: searchImage,  style: UIBarButtonItemStyle.Plain, target: self, action: #selector(classname.buttonActionMethodName(_:)))
    backBtn.tintColor = UIColor.lightGrayColor()
  if let font = UIFont(name: "AvenirNext", size: 15) {
    backBtn.setTitleTextAttributes([NSFontAttributeName: font], forState: UIControlState.Normal)
}
    self.navigationItem.leftBarButtonItem = backBtn

}

func buttonActionMethodName(){
  self.navigationController!.popViewControllerAnimated(true)

}

Ответ 5

Используйте следующий код:

    navigationController?.navigationBar.barTintColor = UIColor.purpleColor()
    navigationController?.navigationBar.tintColor = UIColor.whiteColor()

измените цвет в соответствии с вашими потребностями

Ответ 6

Swift 4

в AppDelegate.swift

UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.font: UIFont(name: "Helvetica-Bold", size: 15)!], for: .normal)

Ответ 7

в быстрой 4.2

to change back button color
self.navigationController?.navigationBar.tintColor = .white