web-dev-qa-db-fra.com

NSFontAttributeName a été remplacé par String

j'essaie de styler correctement la barre de navigation. Je dois remplacer la police par helvetica neue avec un point de taille de 19. J'ai déjà utilisé ce code, mais j'ai remarqué que cela ne fonctionne plus aussi bien: 

navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 19)]

cela se produit parce que le type de NSFontAttributeName a été remplacé par String, j'ai essayé de le réparer avec

navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: "HelveticaNeue-Light, 19"]

mais le compilateur continue à me donner une erreur liée à la taille du point dans la police, comment puis-je résoudre ce problème?

33
Mono.WTF

Le constructeur UIFont renvoie un optionnel (UIFont?) que vous devez décompresser pour pouvoir l'utiliser. Ajoutez ! si vous êtes sûr d'avoir un nom de police valide:

Swift 4.2:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: UIFont(name: "HelveticaNeue-Light", size: 19)!]

Swift 4:

navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Light", size: 19)!]

Swift 3:

navigationController?.navigationBar.titleTextAttributes = [NSFontAttributeName: UIFont(name: "HelveticaNeue-Light", size: 19)!]

Remarque: Si vous définissez une police avec un nom statique dans votre code, le décompression forcée est sécurisée une fois que vous avez vérifié que vous utilisez un nom de police valide. Si vous obtenez le nom de la police d’une source externe (l’utilisateur ou un serveur), vous voudrez utiliser la liaison optional telle que if let font = UIFont(... ou guard let font = UIFont(... pour la décompresser en toute sécurité avant utilisation. 

94
vacawama

Lorsque Swift 4 NSFontAttributeName est obsolète, vous pouvez utiliser les valeurs NSAttributedStringKey pour définir des attributs.

if let fontStyle = UIFont(name: "HelveticaNeue-Light", size: 19) {
  navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.font: fontStyle]
}

Avec Swift 4.2NSAttributedStringKey est modifié en NSAttributedString.Key.

if let fontStyle = UIFont(name: "HelveticaNeue-Light", size: 19) {
  navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: fontStyle]
}

Pour plus d'options pour NSAttributedStringKey, vous pouvez visiter ce lien https://developer.Apple.com/documentation/foundation/nsattributedstringkey/

50
abdullahselek

Swift 4.2

NSAttributedStringKey a été renommé NSAttributedString.Key dans Swift 4.2.

if let fontStyle = UIFont(name: "HelveticaNeue-Light", size: 19) {
  navigationController?.navigationBar.titleTextAttributes = [NSAttributedString.Key.font: fontStyle]
}
0
Ellen