2016-01-28 3 views
0

Я вообще отладчик пациентов, проводя много времени в Google и ищу ответ на мою проблему. Однако мое терпение закончилось, и я начинаю считать, что это просто невозможно.Как изменить шрифт UIBarButtonItem в Swift?

Однако я работаю над приложением iOS, используя панель навигации, и решил использовать шрифт «Optima» для всего моего пользовательского интерфейса. Я смог изменить шрифт заголовка моей панели навигации, а также кнопку настраиваемой панели навигации на моем первом представлении. Но при любых последующих представлениях шрифт на моей задней панели по умолчанию используется системой. Для моей жизни я не могу найти способ изменить это.

Я пробовал все, что пришло на поиск, и самый близкий успех у меня был от this blog post.

Этот код ниже работал для меня, но, конечно, менял обратную кнопку на изображение, не меняя шрифт, как я надеялся.

self.navigationController?.navigationBar.backIndicatorImage = UIImage(named: "Tab_Trophy") 
self.navigationController?.navigationBar.backIndicatorTransitionMaskImage = UIImage(named: "Tab_Trophy") 
self.navigationItem.backBarButtonItem = UIBarButtonItem(title: "Back", style: UIBarButtonItemStyle.Plain, target: nil, action: nil) 

(Кстати, код выше в viewDidLoad() мнение, моя кнопка назад пришлет пользователю)

Во всяком случае, я попытался с помощью setTitleTextAttributes ниже в разных местах, но безрезультатно.

setTitleTextAttributes([NSFontAttributeName: UIFont(name: "Optima", size: 19.0)!], forState: .Normal) 

Так что мой вопрос: можно ли это сделать? Или мне нужно сделать изображение с текстом в шрифте, который я хочу, и использовать вышеприведенный код, который работает?

ответ

1

Вы можете изменить шрифт всех UIBarButtonItem этикетки для приложения вы можете сделать это:

UINavigationBar.appearance().titleTextAttributes = [ 
    NSFontAttributeName: UIFont(name: "Optima", size: 19.0)! 
] 

С другой стороны, если вы хотите, чтобы настроить одну метку, вы можете использовать пользовательскую кнопку с чем-то вроде:

let button = UIButton() 
// Customise button as required 
let barButtonItem = UIBarButtonItem(customView: button) 
+0

Я пробовал оба ваши предложения, и приложение по-прежнему настаивает на системном шрифте. Возможно, я что-то делаю неправильно, или у меня есть другая часть моего раскадровки или кода, который это испортит. Я сейчас только соглашусь на системный шрифт, но если я наткнулся на решение, которое я опубликую. –

+0

Кажется, что все, что вы делаете, переписывается чем-то другим, вам нужно исправить это, прежде чем вы сможете что-либо сделать. – Ander

+1

ОП попросил изменить элементы панели кнопок. UINavigationBar.appearance(). TitleTextAttributes изменяет только элементы навигации. См. Мой ответ для ответа. –

0

следующий код изменит шрифт как в верхней «» навигационной панели и нижней панели инструментов «» элементов (UINavigationBar.appearance(). titleTextAttributes только изменяет Navbar).

Примечания:

  • Он устанавливает шрифт NavBar с помощью:

    navigationController.navigationBar.titleTextAttributes

  • Он устанавливает элементы панели инструментов с помощью цикла через каждый из них и используя:

    toolbarItem.setTitleTextAttributes

  • Она работает в viewDidLayoutSubviews так, что элементы, добавленные на панель инструментов в раскадровке также будут затронуты. Если вы все программно выполняете, вы можете разместить это в viewDidLoad или viewWillAppear.
  • Логическое firstShow - это просто предотвратить запуск этого кода каждый раз, когда пользователь поворачивает свое устройство.Не строго необходимо (и не нужно, если вы переместите код в viewDidLoad/viewWillAppear, как описано выше), но немного более эффективным.
  • Развертывание шрифта может показаться немного педантичным, но в противном случае приложение выйдет из строя, если Apple выведет ваш именованный шрифт в будущую версию iOS.
  • В нем не указывается цвет элементов панели кнопок (это делает бесполезным выделение/не выделение их окраски) - вместо этого используйте оттенок приложения по умолчанию (например, в раскадровке), чтобы указать их цвет.
  • Он задает цвет для навигатора (оттенок приложения игнорируется для заголовка навигатора, но он невосприимчив к выделенной/непонятной проблеме в его кнопках).
  • Изменение «AmericanTypewriter», цвет и добавление других атрибутов по мере необходимости.
  • Делитесь и наслаждайтесь.

    var firstShow = false 
    
    override func viewDidLayoutSubviews() { 
    
        super.viewDidLayoutSubviews() 
    
        if firstShow { 
    
         let navbarAttributes:[String:Any] 
         let toolbarAttributes:[String:Any] 
         if let font = UIFont(name: "AmericanTypewriter", size: 22.0) { 
          navbarAttributes = [ 
           NSFontAttributeName: font, 
           NSForegroundColorAttributeName : UIColor.init(red:1.0, green:0, blue:0, alpha:1.0) 
          ] 
          toolbarAttributes = [ 
           NSFontAttributeName: font 
          ] 
         } 
         else { 
          navbarAttributes = [ 
           NSForegroundColorAttributeName : UIColor.init(red:1.0, green:0, blue:0, alpha:1.0) 
          ] 
          toolbarAttributes = [:] 
         } 
         navigationController?.navigationBar.titleTextAttributes = navbarAttributes 
    
         if let toolbarItems = navigationController?.toolbar.items { 
          for toolbarItem in toolbarItems { 
           toolbarItem.setTitleTextAttributes(toolbarAttributes, for: .normal) 
           toolbarItem.setTitleTextAttributes(toolbarAttributes, for: .disabled) 
          } 
         } 
    
         firstShow = false 
        } 
    } 
    

 Смежные вопросы

  • Нет связанных вопросов^_^