web-dev-qa-db-fra.com

UIFont fontWithName renvoie nil

Dans mon info.plist, j'ai ajouté une clé "Polices fournies par l'application" et ajouté EdwardianScriptITCStd.otfenter image description here

Mais, lorsque j'essaie d'obtenir cette police, le résultat est nul: 

NSLog(@"%@", [UIFont fontWithName:@"EdwardianScriptITCStd" 
                                size:16.0f]);

J'ai imprimé les familles de polices en utilisant [UIFont familyNames] et ce n'est pas là non plus:

(
    Thonburi,
    "Snell Roundhand",
    "Academy Engraved LET",
    "Marker Felt",
    "Geeza Pro",
    "Arial Rounded MT Bold",
    "Trebuchet MS",
    Arial,
    Marion,
    "Gurmukhi MN",
    "Malayalam Sangam MN",
    "Bradley Hand",
    "Kannada Sangam MN",
    "Bodoni 72 Oldstyle",
    Cochin,
    "Sinhala Sangam MN",
    "Hiragino Kaku Gothic ProN",
    Papyrus,
    Verdana,
    "Zapf Dingbats",
    Courier,
    "Hoefler Text",
    "Euphemia UCAS",
    Helvetica,
    "Hiragino Mincho ProN",
    "Bodoni Ornaments",
    "Apple Color Emoji",
    Optima,
    "Gujarati Sangam MN",
    "Devanagari Sangam MN",
    "Times New Roman",
    Kailasa,
    "Telugu Sangam MN",
    "Heiti SC",
    "Apple SD Gothic Neo",
    Futura,
    "Bodoni 72",
    Baskerville,
    "Chalkboard SE",
    "Heiti TC",
    Copperplate,
    "Party LET",
    "American Typewriter",
    "Bangla Sangam MN",
    Noteworthy,
    Zapfino,
    "Tamil Sangam MN",
    "DB LCD Temp",
    "Arial Hebrew",
    Chalkduster,
    Georgia,
    "Helvetica Neue",
    "Gill Sans",
    Palatino,
    "Courier New",
    "Oriya Sangam MN",
    Didot,
    "Bodoni 72 Smallcaps"
)

Qu'est-ce qui me manque? Merci!

27
0xSina

Mes commentaires commençaient à être longs, alors j'ai décidé de soumettre une réponse à la place :)

  1. Les polices personnalisées ne sont prises en charge que dans iOS 3.2 et versions ultérieures. Assurez-vous donc que votre paramètre de génération Cible de déploiement ne retourne pas plus loin que la version 3.2.

  2. Vérifiez que la police est incluse dans votre cible de construction (dans la phase de construction "Copier les ressources de l'ensemble")

  3. Vérifiez la valeur brute de la clé pour "Polices fournies par l'application" afin de vous assurer qu'elle est correcte. Lorsque vous visualisez le * .plist dans Xcode, cliquez avec le bouton droit de la souris et choisissez "Afficher les clés/valeurs brutes", puis vérifiez que la clé est UIAppFonts.

  4. Je pense qu'iOS requiert le nom PostScript d'une police lors de l'utilisation de fontWithName: size:, que vous pouvez trouver/vérifier en ouvrant la police dans le livre de polices d'Apple et en tapant command+I.

  5. À un moment donné, l'utilisation de polices personnalisées et de UILabel posait un problème. Je ne suis pas sûr si ce problème existe toujours. La solution consistait à sous-classe UILabel et à y définir la police.

Si cela ne fonctionne toujours pas, ce fil Stack Overflow sur des polices personnalisées a pas mal d'informations, vous aurez peut-être de la chance.

EDIT
Rien ne garantit que j'ai le même fichier de police que vous, mais sur ma machine, le nom PostScript est "EdwardianScriptITC".

77
inspector-g

Si votre nom de police inclut le caractère '-', remplacez-le par un espace. Par exemple, Arial-Bold.ttf est utilisé comme [UIFont fontWithName: "Arial Bold" taille: 10];

4
BeyazBaron

j'avais le même problème. vous pouvez définir la police sur une étiquette à partir du constructeur d’interface du storyboard. puis obtenez cette police en mode débogage à partir de label comme:

let cfnt = txtUsernameField.font

puis cliquez sur le bouton i dans la petite fenêtre de débogage et le nom de famille de la police sera écrit dans la fenêtre de la console. et vous pouvez l'utiliser comme ça:

txtUsernameField.font = UIFont(name: "MyriadPro-CondIt", size: 14) 
1
user3812138

J'ai eu ce problème bien que je me suis juré d'avoir des polices personnalisées qui fonctionnaient très bien auparavant.

Il s'avère que je devais juste exécuter "Nettoyer" sur mon projet dans le projet XCode afin qu'il puisse rétablir les références.

0
rmigneco

Le nom de police à utiliser semble être le "Nom de famille" dans le livre de polices. J'ai essayé le nom PostScript, mais cela ne fonctionne pas toujours. Autant que je sache, le nom de famille a toujours fonctionné jusqu'à maintenant.

Vous pouvez vérifier ces informations, comme indiqué dans la réponse ci-dessus, dans Font Book, sélectionnez la police et appuyez sur cmd + i.

J'espère que cela t'aides...

0
Sagi Mann

Le problème que j'ai rencontré est que certaines des polices de la famille de polices sont retournées correctement tandis que d'autres sont retournées nil.

Par exemple:

  • MuseoSansRounded-500 valide
  • MuseoSansRounded-900 nul

Il s'est avéré que Xcode incluait automatiquement les polices personnalisées utilisées dans Interface Builder. J'avais utilisé la police de poids 500 en IB mais pas celle de 900.

Ces deux étapes l'ont corrigé pour moi:

  1. Dans les paramètres de construction, recherchez et désactivez Auto-Activate Custom Fonts. Il y avait deux exemples de cela dans mon projet.

  2. Au lancement de l'application, enregistrez manuellement les polices personnalisées auprès du système. J'ai utilisé l'extrait de cette SO réponse: https://stackoverflow.com/a/32600784/131378

Au nom de l’exhaustivité, j’aurais pu laisser Auto-Activate Custom Fonts activé, puis ignorer l’inscription de ces polices dans le code. Cependant, je ne voulais pas mettre à jour le code pendant le développement si je finissais par utiliser une nouvelle police dans IB préalablement enregistrée manuellement. Xcode se plaint si vous enregistrez une police déjà activée automatiquement.

0
Mark Suman