Быстрое изменение шрифта и цвет кнопки "Назад"
Я разрабатываю приложение в 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