2017-03-18 2 views
1

J'ai un élément de barre en haut à droite de ma barre de navigation. J'ai été capable de changer la police, mais pas l'espacement des lettres. Voici le code que je l'ai utilisé et il a changé la police seulement:Comment ajouter l'espacement des lettres à un UIBarButtonItem?

let font = UIFont(name: "Avenir-Light", size: 22) 
let attributes = [NSFontAttributeName: font!, 
         NSKernAttributeName : CGFloat(10.0)] as [String : Any] 
newListBarButtonItem.setTitleTextAttributes(attributes, for: .normal) 

j'ai écrit ci-dessus dans viewDidLoad mon contrôleur de vue et il seulement changé la police, et non l'espacement des lettres.

J'ai aussi essayé ce qui suit, mais cela ne change pas la police ou l'espacement des lettres:

UIBarButtonItem.appearance().setTitleTextAttributes(attributes,for: .normal) 

Répondre

1

Vous pouvez toujours ajouter un enfant UIView sur BarButtonItem customView. Par exemple, un UIButton qui sera formaté comment vous voulez:

class ViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     let spacedButton = UIButton(type: .system) 
     spacedButton.setTitle("Button", for: .normal) 
     spacedButton.addTextSpacing(spacing: 6.0) 
     spacedButton.sizeToFit() 

     let barButton = UIBarButtonItem(customView: spacedButton) 

     self.navigationItem.rightBarButtonItem = barButton 
    } 
} 

est ici une extension pour le UIButton:

extension UIButton { 
    func addTextSpacing(spacing: CGFloat) { 
     guard let text = self.titleLabel?.text else { return } 
     let attributedString = NSMutableAttributedString(string: text) 
     attributedString.addAttribute(NSKernAttributeName, 
            value: spacing, 
            range: NSRange(location: 0, length: text.characters.count)) 
     self.setAttributedTitle(attributedString, for: .normal) 
} 

}

Résultat:

enter image description here

+0

de Nice Solution! Juste pour l'achèvement: vous devrez définir la cible sur le nouveau spacedButton. – inf1783