web-dev-qa-db-fra.com

La police personnalisée dans ios ne fonctionne pas

Je souhaite utiliser HelveticaNeue-UltraLight dans mon application ios. J'ajoute le fichier de police en tant que ressource à mon projet et j'ajoute la clé "Polices fournies par l'application" dans le fichier plist. Le nom du fichier est HelveticaNeue.dfont et je l’ai ajouté au tableau de clés.

Lorsque je vérifie les polices disponibles, je peux le voir maintenant ...

  NSArray *fonts = [UIFont fontNamesForFamilyName:@"Helvetica Neue"];

for(NSString *string in fonts){
    NSLog(@"%@", string);
}

1-07-08 17:32:57.866 myApp[5159:207] HelveticaNeue-Bold
2011-07-08 17:32:57.866 myApp[5159:207] HelveticaNeue-CondensedBlack
2011-07-08 17:32:57.867 myApp[5159:207] HelveticaNeue-Medium
2011-07-08 17:32:57.867 myApp[5159:207] HelveticaNeue
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-Light
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-CondensedBold
2011-07-08 17:32:57.868 myApp[5159:207] HelveticaNeue-LightItalic
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-UltraLightItalic
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-UltraLight // HERE IT IS!
2011-07-08 17:32:57.869 myApp[5159:207] HelveticaNeue-BoldItalic
2011-07-08 17:32:57.870 myApp[5159:207] HelveticaNeue-Italic

Mais quand j'essaie de l'obtenir avec [UIFont fontWithName: @ "HelveticaNeue-UltraLight" taille: 12] Je viens juste d'obtenir HelveticaNeue-Light ..

Je ne reçois aucune erreur ni aucun avertissement . Aide s'il vous plaît!

40
the Reverend

Non seulement le fichier doit être ajouté au projet, mais il doit également l'être dans la cible. 

Parfois (comme dans mon cas), lorsque vous faites glisser le fichier ".ttf" dans Xcode, le "ajouter à la cible" n'est pas coché. Cela signifie que le fichier est réellement visible dans votre projet, mais qu'il n'est pas intégré à l'application.

Pour en être sûr:

  • Cliquez sur le nom du projet (volet de gauche) 
  • Puis sur la cible (volet central)
  • Puis "Build Phases" (troisième onglet du volet de droite) 
  • Puis "Copier les ressources du paquet"

Vous devriez voir le fichier de police dans cette liste.

99
Ben G

Je pense que vous rencontrez le même problème que moi: il y a un bogue dans iOS qui empêche l'utilisation de plus de 2 polices de la même famille.

Voir l'article du blog ici pour plus de détails et une solution: http://www.pixeldock.com/blog/uifont-problem-when-using-more-than-2-custom-fonts-of-the-same-font-family/

après avoir ajouté le fichier de police dans le paquet "Police fournie par l'application" propriété, cliquez sur la flèche déroulante et entrez le nom de la police avec l'extension.

9
Baljeet Singh

Ouvrez l'application Font Book. Si vous avez installé les polices vous-même, allez à utilisateur, recherchez les polices de votre choix et utilisez le nom PostScript de la police dans votre projet xcode.

Cela devrait fonctionner même pour différentes variantes de police de la même famille.

8
andresousa

Cela fonctionne avec différentes variantes de la même police (même dans IOS 8). Je posterai mon erreur au cas où quelqu'un aurait le même problème ... Je utilisais le nom de fichier de la police au lieu du nom de la police ... Une solution utile est d'imprimer toutes les polices disponibles et de rechercher celle que j'étais. en utilisant. Dans Swift serait:

for fontFamilyNames in UIFont.familyNames {
    for fontName in UIFont.fontNames(forFamilyName: fontFamilyNames) {
        print("FONTNAME:\(fontName)")
    }
}

J'ai trouvé ce tutoriel utile dans: Code with Chris

7
TomCobo

Bien que cela n’aide probablement pas le PO, il pourrait être utile à d’autres. 

Avec iOS 5, Helvetica Neue est automatiquement inclus; vous n'êtes pas obligé d'ajouter cette police personnalisée à l'ensemble. Il est même possible d'utiliser cette famille de polices directement à partir d'Interface Builder, ce qui est extrêmement pratique.

3
sho

Essayez ceci, cela vous servira également.

    [compete_Label setFont:[UIFont fontWithName:@"Helvetica-Bold" size:12]];
2
vishiphone

J'ai fini par acheter la police Helvetica Neue UltraLight à une tierce partie, sans la moindre difficulté.

1
the Reverend

Essayez avec des espaces:

[UIFont fontWithName:@"Helvetica Neue UltraLight" size:12];

Voir Certaines polices n'apparaissent pas?

1
Jano

Après avoir passé des heures, je me suis rendu compte que le nom de la police à ajouter ne correspond pas au nom de fichier de la police, mais au nom réel de la police. J'essayais d'inclure le fichier de polices bonveno.ttf . J'ai inclus le nom du fichier avec l'extension dans info.plist et j'ai pu voir la police dans la liste Copier les ressources du paquet . Mon code était comme

self.label.font = [UIFont fontWithName:@"bonveno" size:30];

cela causait le problème. Ensuite, j'ai double-cliqué sur le fichier de police de Finder pour voir un aperçu de la police. Cette fois, j’ai remarqué le nom de la police dans la fenêtre d’aperçu sous la forme/ BonvenoCF . Alors j'ai ajouté ce nom dans le code comme

self.label.font = [UIFont fontWithName:@"BonvenoCF" size:30];

Travaillé comme un charme !! Ne peut pas vivre sans cette police mignonne dans mes applications.

1
Sayka

En plus de la réponse bien expliquée @Ben answer , si vous n'obtenez toujours pas vos polices, utilisez ou attribuez simplement votre police à une Label dans l'une de vos Storyboard, vous commencerez à l'obtenir à l'aide de ce code

Si vous ne parvenez toujours pas à obtenir la police avec [UIFont fontWithName:@"Font-Regular" size:11];, il doit y avoir un problème de nommage. Arrêtez-vous à n’importe quel point de pause dans le débogueur et déboguez-le sous différents noms pour voir quel po imprime un objet autre que nil.

po [UIFont fontWithName: @ "FontRegular" taille: 11];

ou

po [UIFont fontWithName: @ "Police régulière" taille: 11];

ou

po [UIFont fontWithName: @ "Font-Regular" size: 11];

Vous obtiendrez <UICTFont: 0x7fe2044021d0> font-family: "Interstate-Regular"; font-weight: normal; font-style: normal; font-size: 11.00pt pour le nom de police actuel, sinon vous obtiendrez nil

0
Baig

Pour utiliser des polices personnalisées dans iOS, ajoutez simplement vos polices par glisser-déposer à votre projet. Mentionnez le tableau de noms de polices avec extension dans Info.plist avec la clé "Polices fournies par l'application". Imprimez ensuite tous les noms de famille de police en utilisant le code ci-dessous:

for (NSString* family in [UIFont familyNames])

{

    DebugLog(@"FONT FAMILY: %@", family);

    for (NSString *name in [UIFont fontNamesForFamilyName: family])
    {
        DebugLog(@"  %@", name);
    }
}

Console d'impression:

Arial Hebrew ArialHebrew-Bold ArialHebrew-Light ArialHebrew

Calibri Calibri-Bold Calibri

Géorgie Georgia-BoldItalic Georgia-Bold Géorgie-Italique Géorgie

Ensuite, à partir de la console, vous obtiendrez les noms de police réels (voir ci-dessus). Utilisez le code ci-dessous pour créer une police -

Dans le texte de base: 

CTFontRef fontRef = CTFontCreateWithName((CFStringRef)fontName, fontSize, NULL);

En UIKit:

UIFont *font = [UIFont fontWithName:fontName size:10];

Remarque: ici fontName = @ "Calibri-Bold" est sans extension.

0
Mahesh

Une autre chose à vérifier est sur un Mac: Ouvrez le livre de polices de l'application. Ensuite, allez fichier -> validation de fichier et ouvrez la police. Si quelque chose ne fonctionne pas (même avec un avertissement), iOS rejette généralement le chargement de la police dans l'application sans erreur. 

Si c'est le cas, vous pouvez corriger les erreurs en ouvrant la police dans une application gratuite appelée "Typelight" et en enregistrant de nouveau la police "Enregistrer sous".

0
Steven Mark Ford

En plus de:

  • ajout des noms de fichier de police à info.plist sous "Polices fournies par application"
  • ajouter les fichiers réels au projet.

Vous devez également vous assurer que sous Cibles -> Phases de construction -> Copier les ressources du paquet a le nom noms de fichier des polices personnalisées. 

Pour vérifier si elles sont apparues, vous pouvez faire quelque chose comme:

        UIFont.familyNames.forEach { (name) in
        print(name)
    }
0
azwethinkweiz