Puis-je intégrer une police personnalisée dans une application iPhone?

772

J'aimerais qu'une application inclue une police personnalisée pour rendre le texte, la charger, puis l'utiliser avec des UIKitéléments standard comme UILabel. Est-ce possible?

Airsource Ltd
la source
5
Dans l'une des conférences CS193p (développement d'applications iPhone) à Stanford, Evan a noté que l'installation de votre propre police sur un appareil est «beaucoup de travail», ce qui signifie au moins que c'est possible :-)
Ilya Birman
2
L'iPhone 3.2 permet la police personnalisée, mais c'est uniquement l'iPad (voir la réponse ci-dessous)
samvermette
6
J'ai finalement utilisé des images.
Airsource Ltd
2
wow ... après tout cela, la réponse est toujours des images ... incroyable. J'espérais vraiment une implémentation solide de polices personnalisées avec la même capacité que les polices système. hélas ...
d2burke
1
J'ai considérablement réduit la question d'origine pour refléter la décennie qui s'est écoulée depuis que je l'ai posée. J'encourage tout le monde à réduire ses commentaires et réponses de manière appropriée.
Airsource Ltd

Réponses:

646

iOS 3.2 et versions ultérieures prennent en charge cela. Directement à partir du document Quoi de neuf dans iPhone OS 3.2 :

Prise en charge des polices personnalisées Les
applications qui souhaitent utiliser des polices personnalisées peuvent désormais inclure ces polices dans leur ensemble d'applications et enregistrer ces polices auprès du système en incluant la clé UIAppFonts dans leur fichier Info.plist. La valeur de cette clé est un tableau de chaînes identifiant les fichiers de polices dans le bundle de l'application. Lorsque le système voit la clé, il charge les polices spécifiées et les met à la disposition de l'application.

Une fois les polices définies dans le Info.plist, vous pouvez utiliser vos polices personnalisées comme n'importe quelle autre police dans IB ou par programme.

Il existe un fil conducteur sur les forums des développeurs Apple:
https://devforums.apple.com/thread/37824 (connexion requise)

Et voici un excellent et simple tutoriel en 3 étapes sur la façon d'y parvenir (lien cassé supprimé)

  1. Ajoutez vos fichiers de polices personnalisés dans votre projet en utilisant Xcode comme ressource
  2. Ajoutez une clé à votre Info.plistfichier appelée UIAppFonts.
  3. Faire de cette clé un tableau
  4. Pour chaque police dont vous disposez, entrez le nom complet de votre fichier de police (y compris l'extension) en tant qu'éléments du UIAppFontstableau
  5. sauver Info.plist
  6. Maintenant, dans votre application, vous pouvez simplement appeler [UIFont fontWithName:@"CustomFontName" size:12]pour obtenir la police personnalisée à utiliser avec vos UILabels et UITextViews , etc.

Aussi: Assurez-vous que les polices sont dans vos ressources de bundle de copie.

samvermette
la source
14
Voici un tutoriel étape par étape pour iOS4: blog.beefyapps.com/2010/06/custom-fonts-in-ios-4
pm_labs
15
Ce tutoriel est très bon. shang-liang.com/blog/custom-fonts-in-ios4 Surtout, l'argument NSString de [UIFont fontWithName: ...] est le nom du système d'exploitation de la police plutôt que le nom du fichier.
Willster
152
Avant que quelqu'un d'autre ne passe 3 heures à installer fontforge afin de trouver le nom postscript réel de la police requise par iOS. Je soulignerai que vous pouvez simplement appuyer sur Cmd + I sur la police dans le livre de polices pour trouver ces informations.
Daniel Wood
42
Après avoir eu du mal à obtenir le bon nom de police, je viens de répertorier les polices installées et de les trouver. Très utile. Voici le code: for (NSString * familyName in [UIFont familyNames]) {NSLog (@ "Family% @", familyName); NSLog (@ "Names =% @", [UIFont fontNamesForFamilyName: familyName]); }
Steve Potter
26
Si votre code ne fonctionne pas, assurez-vous que le fichier de police trouvé apparaît dans "Build Phases" -> "Copy Bundle Resouces"
Mickey
299

Modifier: à partir d'iOS 3.2, cette fonctionnalité est intégrée. Si vous devez prendre en charge la version antérieure à 3.2, vous pouvez toujours utiliser cette solution.

J'ai créé un module simple qui étend UILabelet gère le chargement des fichiers .ttf. Je l'ai publié opensource sous la licence Apache et l'ai mis sur github ici.

Les fichiers importants sont FontLabel.het FontLabel.m.

Il utilise une partie du code de la réponse de Genericrich .

Parcourez la source ici.

OU

  • Copiez votre fichier de police dans les ressources

  • Ajoutez une clé à votre Info.plistfichier appelée UIAppFonts. ("Polices fournies par l'application)

  • Faire de cette clé un tableau

  • Pour chaque police dont vous disposez, entrez le nom complet de votre fichier de police (y compris l'extension) en tant qu'éléments du tableau UIAppFonts

  • sauver Info.plist

  • Maintenant, dans votre application, vous pouvez simplement appeler [UIFont fontWithName:@"CustomFontName" size:15]pour obtenir la police personnalisée à utiliser avec votre UILabelset UITextViews, etc.

Pour plus d'informations

commanda
la source
2
J'ai essayé d'utiliser votre code mais il se bloque assez souvent en fonction de la police. Par exemple, essayez d'utiliser les polices africaines ou Tiki d'ici fontspace.com/category/tiki .
4thSpace
2
Cette bibliothèque fonctionne très bien. J'ai besoin d'aide pour l'espacement vertical. Je ne sais pas comment le faire. J'ai donc ce message.numberOfLines = 3; Comment contrôler l'espacement vertical entre la ligne 1 et la ligne 2 et la ligne 3? Merci, Tee
teepusink
2
@commanda Bonjour commanda, le lien que vous avez fourni dans votre réponse semble indisponible.
Parth Bhatt
5
@ParthBhatt Vous devez utiliser la solution fournie dans stackoverflow.com/a/2616101/21447 au lieu de FontLabel, car cette fonctionnalité est désormais fournie par CocoaTouch.
commanda
2
@ParthBhatt: Je ne sais pas pourquoi le dépôt n'est plus hébergé chez zynga, mais il est disponible sur github.com/kballard/fontlabel
Lily Ballard
116

Il existe un moyen simple d'utiliser des polices personnalisées dans iOS 4 .

  1. Ajoutez votre fichier de police (par exemple, Chalkduster.ttf) au dossier Ressources du projet dans XCode.
  2. Ouvrez info.plistet ajoutez une nouvelle clé appelée UIAppFonts. Le type de cette clé doit être un tableau.
  3. Ajoutez votre nom de police personnalisé à ce tableau, y compris l'extension ( Chalkduster.ttf).
  4. Vous pouvez maintenant l'utiliser [UIFont fontWithName:@"Chalkduster" size:16]dans votre application.

Malheureusement, IB ne permet pas d'initialiser les étiquettes avec des polices personnalisées. Consultez cette question pour résoudre ce problème. Ma solution préférée consiste à utiliser une UILabelsous-classe personnalisée :

@implementation CustomFontLabel

- (id)initWithCoder:(NSCoder *)decoder
{
    if (self = [super initWithCoder: decoder])
    {
        [self setFont: [UIFont fontWithName: @"Chalkduster" size: self.font.pointSize]];
    }
    return self;
}

@end
alexey
la source
3
Cela semble être supporté à 3.2, pas seulement 4.0+
Jesse Rusak
1
Merci! Le problème que j'ai rencontré est que les polices personnalisées semblent un peu élevées (espace supplémentaire ci-dessous) par rapport à leurs homologues intégrées. J'ai essayé d'utiliser le dépôt FontLabel de GitHub, ce qui aide une partie du temps, mais pas tout le temps.
Joe D'Andrea
12
Il convient de noter que la chaîne que vous transmettez au constructeur UIFont n'est PAS le nom de fichier moins l'extension, c'est le nom interne de la police. J'ai eu des problèmes pour charger une police avec un nom de fichier que j'avais raccourci. Lorsque j'ai utilisé le nom de police entier contenu dans le fichier, la police s'est bien chargée.
slayton
5
Ce que Slayton vient de dire est essentiel. [UIFont fontWithName: attend le "Nom complet" de la police, qui est visible en l'ouvrant dans le Livre des polices et en sélectionnant: Aperçu -> Afficher les informations sur la police
electromaggot
51

Dans Info.plist, ajoutez l'entrée "Polices fournies par l'application" et incluez les noms de police sous forme de chaînes:

Fonts provided by application
           Item 0        myfontname.ttf
           Item 1        myfontname-bold.ttf
           ...

Vérifiez ensuite que votre police est incluse en exécutant:

for (NSString *familyName in [UIFont familyNames]) {
    for (NSString *fontName in [UIFont fontNamesForFamilyName:familyName]) {
         NSLog(@"%@", fontName);
    }
}

Notez que le nom de votre fichier ttf peut ne pas être le même que celui que vous utilisez lorsque vous définissez la police de votre étiquette (vous pouvez utiliser le code ci-dessus pour obtenir le paramètre "fontWithName"):

[label setFont:[UIFont fontWithName:@"MyFontName-Regular" size:18]];
bdev
la source
36

modifier: Cette réponse est obsolète depuis iOS3.2; utiliser UIAppFonts

La seule façon dont j'ai réussi à charger des UIFonts personnalisés est via le framework GraphicsServices privé.

Les éléments suivants chargeront toutes les .ttfpolices du bundle principal de l'application:

BOOL GSFontAddFromFile(const char * path);
NSUInteger loadFonts()
{
    NSUInteger newFontCount = 0;
    for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
        newFontCount += GSFontAddFromFile([fontFile UTF8String]);
    return newFontCount;
}

Une fois les polices chargées, elles peuvent être utilisées comme les polices fournies par Apple:

NSLog(@"Available Font Families: %@", [UIFont familyNames]);
[label setFont:[UIFont fontWithName:@"Consolas" size:20.0f]];

GraphicsServices peut même être chargé au moment de l'exécution au cas où l'API disparaîtrait à l'avenir:

#import <dlfcn.h>
NSUInteger loadFonts()
{
    NSUInteger newFontCount = 0;
    NSBundle *frameworkBundle = [NSBundle bundleWithIdentifier:@"com.apple.GraphicsServices"];
    const char *frameworkPath = [[frameworkBundle executablePath] UTF8String];
    if (frameworkPath) {
        void *graphicsServices = dlopen(frameworkPath, RTLD_NOLOAD | RTLD_LAZY);
        if (graphicsServices) {
            BOOL (*GSFontAddFromFile)(const char *) = dlsym(graphicsServices, "GSFontAddFromFile");
            if (GSFontAddFromFile)
                for (NSString *fontFile in [[NSBundle mainBundle] pathsForResourcesOfType:@"ttf" inDirectory:nil])
                    newFontCount += GSFontAddFromFile([fontFile UTF8String]);
        }
    }
    return newFontCount;
}
rpetrich
la source
note à ceux qui se demandent, cela fonctionne, mais vous devrez appeler loadFonts juste avant d'utiliser la police - ils ne semblent pas rester chargés dans l'application
pixel
Dans OS 3.0, vous devez absolument utiliser le deuxième deuxième exemple, n'oubliez pas l'importation. Ça a plutôt bien fonctionné pour moi.
M. Ryan
Une autre remarque - il s'agit d'un cadre privé, et le charge dynamiquement ... qui arrêteront probablement l'acceptation de votre application dans l'AppStore.
pixel
Quelle conclusion? Quelles alternatives à cette méthode?
Raj Pawan Gumdal
1
DEVRAIT également noter que [NSString sizeWithFont:[UIFont fontWithName:@"customFont" size:14]];renvoie 0 largeur et hauteur pour toutes les polices personnalisées que j'ai essayées.
Luke Mcneice
34

Avec iOS 8+ et Xcode 6+, vous pouvez le faire facilement. Voici les étapes:

1) Faites glisser et déposez votre police dans le Xcodedossier Fichiers de support. N'oubliez pas de marquer votre application dans la section Ajouter aux cibles . À partir de ce moment, vous pouvez utiliser cette police IBet la choisir dans la palette de polices.

entrez la description de l'image ici

2) Pour rendre cette police disponible dans votre appareil, ouvrez votre info.plistet ajoutez la Fonts provided by applicationclé. Il contiendra la clé de l'élément 0, vous devez ajouter votre nom de police comme valeur. Le nom de la police peut varier du nom de votre fichier de police. Mais d'abord, essayez d'ajouter votre nom de fichier dans la plupart des cas, cela fonctionne.

entrez la description de l'image ici

Sinon, cet article m'a toujours aidé.

Voici un extrait rapide du code de cet article pour vous aider à trouver votre nom de police.

func allFonts(){

   for family in UIFont.familyNames(){

       println(family)


       for name in UIFont.fontNamesForFamilyName(family.description)
       {
           println("  \(name)")
       }

   }

}

ÉDITER

Je tiens à mentionner que vous devez ajouter des fichiers de polices aux phases de construction de votre cible , copier les ressources de l'ensemble . Sans cela, vous ne verrez pas votre police sur l'appareil. Et cela pourrait conduire à un comportement inattendu.

Par exemple, je rencontre une bug, quand UITextFieldj'ai une police personnalisée, mais cette police n'était pas dans les ressources du bundle de copie . Et quand je me connecte à viewcontrollerceci textfield, il y a un délai d'environ 4 secondes avant que la viewDidLoadfonction soit appelée. La résolution des problèmes de police a supprimé ce délai. Donc, recommandez de le vérifier deux fois. (rdar: // 20028250) Btw, je n'ai pas pu reproduire le bogue, mais je suis sûr que ce problème était lié à la police.

Dima Deplov
la source
1
Juste une note. Les polices personnalisées ne sont pas disponibles dans LaunchScreens même si elles sont correctement configurées dans IB. Ce qui peut être logique.
Rivera
@Rivera wow, bonne note! Je ne le savais pas. Je pense que l'alternative possible est d'utiliser UIImage avec du texte.
Dima Deplov
@Rivera, merci pour ces informations - est-ce documenté quelque part? Je parcourais les étapes à plusieurs reprises en pensant que j'avais raté une étape.
spongessuck
@spongessuck pas sûr de votre question, mais il y a des documents developer.apple.com/library/ios/documentation/StringsTextFonts/…
Dima Deplov
27

J'ai fait ça comme ceci:

Chargez la police:

- (void)loadFont{
  // Get the path to our custom font and create a data provider.
  NSString *fontPath = [[NSBundle mainBundle] pathForResource:@"mycustomfont" ofType:@"ttf"]; 
  CGDataProviderRef fontDataProvider = CGDataProviderCreateWithFilename([fontPath UTF8String]);

  // Create the font with the data provider, then release the data provider.
  customFont = CGFontCreateWithDataProvider(fontDataProvider);
  CGDataProviderRelease(fontDataProvider); 
}

Maintenant, dans votre drawRect:, faites quelque chose comme ceci:

-(void)drawRect:(CGRect)rect{
    [super drawRect:rect];
    // Get the context.
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextClearRect(context, rect);
    // Set the customFont to be the font used to draw.
    CGContextSetFont(context, customFont);

    // Set how the context draws the font, what color, how big.
    CGContextSetTextDrawingMode(context, kCGTextFillStroke);
    CGContextSetFillColorWithColor(context, self.fontColor.CGColor);
    UIColor * strokeColor = [UIColor blackColor];
    CGContextSetStrokeColorWithColor(context, strokeColor.CGColor);
    CGContextSetFontSize(context, 48.0f);

    // Create an array of Glyph's the size of text that will be drawn.
    CGGlyph textToPrint[[self.theText length]];

    // Loop through the entire length of the text.
    for (int i = 0; i < [self.theText length]; ++i) {
        // Store each letter in a Glyph and subtract the MagicNumber to get appropriate value.
        textToPrint[i] = [[self.theText uppercaseString] characterAtIndex:i] + 3 - 32;
    }
    CGAffineTransform textTransform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
    CGContextSetTextMatrix(context, textTransform);
    CGContextShowGlyphsAtPoint(context, 20, 50, textToPrint, [self.theText length]);
}

Fondamentalement, vous devez faire une boucle de force brute à travers le texte et faire des recherches avec le numéro magique pour trouver votre décalage (ici, voyez-moi en utilisant 29) dans la police, mais cela fonctionne.

De plus, vous devez vous assurer que la police est juridiquement intégrable. La plupart ne le sont pas et il y a des avocats spécialisés dans ce genre de choses, alors soyez prévenu.

Genericrich
la source
1
Je suis sûr que cela fonctionne bien, mais je (vraiment vraiment) ne veux pas écrire mon propre moteur de mise en page pour gérer tout ce que UILabel et UITextView font actuellement pour moi - en particulier l'habillage, le positionnement et l'édition de mots.
Airsource Ltd
1
AFAICS, cela ne fonctionne qu'avec des caractères majuscules, d'où l'appel 'uppercaseString'.
Martin Cote
2
Je suis en train de voter car l'astuce "nombre magique" est un pur hack qui ne fonctionne pas vraiment. La vraie solution est d'obtenir la table cmap à partir du fichier TTF.
Martin Cote
1
Il s'agit d'une information intéressante sur l'utilisation directe des polices avec Core Graphics. Juste pour mettre à jour pour les futurs lecteurs: dans les nouveaux systèmes d'exploitation, on pourrait et devrait utiliser Core Text. Alternativement, on pourrait utiliser CGContextShowTextAtPoint()- bien que cela ne fonctionne pas avec UTF-8.
Ivan Vučica
20

Oui, vous pouvez inclure des polices personnalisées. Reportez-vous à la documentation sur UIFont, en particulier à la fontWithName:size:méthode.

1) Assurez-vous d'inclure la police dans votre dossier de ressources.

2) Le "nom" de la police n'est pas nécessairement le nom du fichier.

3) Assurez-vous que vous avez le droit légal d'utiliser cette police. En l'incluant dans votre application, vous le distribuez également et vous devez avoir le droit de le faire.

août
la source
Avez-vous réellement réussi cela? Je ne peux pas le faire fonctionner, et googler ne trouve que d'autres personnes qui ont essayé et échoué.
Airsource Ltd
Oui. J'ai. Encore une fois, assurez-vous que vous utilisez le nom de police approprié.
Août
1
Quand vous dites "Le" nom "de la police n'est pas nécessairement le nom du fichier" ... comment trouver le nom correct?
Keith Fitzgerald
7
Ouais, cette réponse est fausse. Vous ne pouvez pas faire cela hors de la boîte.
Jonathan Sterling
Mise à jour iOS 9, les documents UIFont ne mentionnent rien sur les polices personnalisées
Cbas
20

Si vous utilisez xcode 4.3, vous devez ajouter fontà la Build Phasesous Copy Bundle Resources, selon https://stackoverflow.com/users/1292829/arne dans le fil, des polices personnalisées Xcode 4.3 . Cela a fonctionné pour moi, voici les étapes que j'ai suivies pour que les polices personnalisées fonctionnent dans mon application:

  1. Ajoutez la police à votre projet. J'ai glissé et déposé les OTF(ou TTF) fichiers dans un nouveau groupe que j'ai créé et accepté le choix de xcode copying the files over to the project folder.
  2. Créez le UIAppFontstableau avec vos polices répertoriées comme éléments dans le tableau. Juste l' namesextension, pas l'extension (par exemple " GothamBold", " GothamBold-Italic").
  3. Cliquez sur le project namechemin en haut de la Project Navigatorpartie gauche de l'écran.
  4. Cliquez sur l' Build Phasesonglet qui apparaît dans la zone principale de xcode.
  5. Développez la Copy Bundle Resourcessection " " et cliquez sur "+"pour ajouter la police.
  6. Sélectionnez le fichier de police dans le navigateur de fichiers qui s'ouvre lorsque vous cliquez sur "+".
  7. Faites cela pour chaque police que vous devez add to the project.
SKris
la source
12

Voici les instructions étape par étape pour le faire. Pas besoin de bibliothèque supplémentaire ou de codage spécial.

http://shang-liang.com/blog/custom-fonts-in-ios4/

La plupart du temps, le problème vient de la police et non de la méthode. La meilleure façon de le faire est d'utiliser une police qui fonctionnera à coup sûr, comme verdana ou geogia. Modifiez ensuite la police souhaitée. Si cela ne fonctionne pas, le nom de la police n'est peut-être pas correct ou la police n'est pas bien formatée.

5566
la source
12

Il est très facile d'ajouter une nouvelle police sur votre application iOS existante.

Vous avez juste besoin d'ajouter la police par exemple font.ttf dans votre dossier de ressources.

Ouvrez votre application info.plist. Ajoutez une nouvelle ligne en tant que "Polices fournies par l'application" et tapez le nom de la police en tant que font.ttf.

Et lorsque vous définissez la police, faites comme setFont:"corresponding Font Name"

Vous pouvez vérifier si votre police est ajoutée ou non par NSArray *check = [UIFont familyNames];.

Il renvoie toutes les polices prises en charge par votre application.

kumar123
la source
11

Je recommanderais de suivre l'un de mes courts tutoriels préférés ici: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/ d'où proviennent ces informations.

Étape 1 - Faites glisser votre .ttf ou .otf du Finder vers votre projet

REMARQUE - Assurez-vous de cocher la case «Ajouter aux cibles» sur la cible de votre application principale

Faites glisser les fichiers de polices dans votre projet et cliquez pour les ajouter à votre cible

Si vous avez oublié de cliquer pour l'ajouter à votre cible, cliquez sur le fichier de police dans la hiérarchie de votre projet et sur le panneau de droite, cliquez sur la cible principale de l'application dans la section Appartenance à la cible

comment ajouter des polices à la cible de l'application si vous avez oublié

Pour vous assurer que vos polices font partie de la cible de votre application, assurez-vous qu'elles apparaissent dans vos ressources de bundle de copie dans les phases de construction

comment vérifier les ressources pour voir si les polices font partie de la cible de l'application

Étape 2 - Ajoutez les noms des fichiers de polices à votre Plist

Accédez aux propriétés cibles iOS personnalisées dans votre section d' informations et ajoutez une clé aux éléments de cette section appelée Fonts provided by application(vous devriez la voir apparaître comme une option lorsque vous la tapez et elle se configurera comme un tableau. Cliquez sur la petite flèche pour ouvrir les éléments du tableau et saisir les noms des fichiers .ttf ou .otf que vous avez ajoutés pour faire savoir à votre application qu'il s'agit des fichiers de police que vous souhaitez mettre à disposition

REMARQUE - Si votre application se bloque juste après cette étape, vérifiez l'orthographe des éléments que vous ajoutez ici

exemple plist avec des polices personnalisées ajoutées

Étape 3 - Découvrez les noms de vos polices pour pouvoir les appeler

Très souvent, le nom de police vu par votre application est différent de ce que vous pensez qu'il est basé sur le nom de fichier de cette police, mettez-le dans votre code et consultez le journal de votre application pour voir quel nom de police appeler dans votre code

Rapide

for family: String in UIFont.familyNames(){
  print("\(family)")
  for names: String in UIFont.fontNamesForFamilyName(family){
      print("== \(names)")
  }
}

Objectif c

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

Votre journal devrait ressembler à ceci:

Exemple de recherche dans le journal pour trouver des noms de police

Étape 4 - Utilisez votre nouvelle police personnalisée en utilisant le nom de l'étape 3

Rapide

 label.font = UIFont(name: "SourceSansPro-Regular", size: 18)

Objectif c

 label.font = [UIFont fontWithName:@"SourceSansPro-Regular" size:18];
ColossalChris
la source
10

Trouvez le TTF dans le Finder et "Get Info". Sous le titre "Nom complet:" il m'a donné un nom que j'ai ensuite utilisé avec fontWithName(je viens de copier et coller le nom exact, dans ce cas, aucune extension '.ttf' n'était nécessaire).

Nano
la source
8

Il n'est pas encore sorti, mais la prochaine version de cocos2d (framework de jeu 2d) prendra en charge les polices bitmap de longueur variable comme cartes de caractères.

http://code.google.com/p/cocos2d-iphone/issues/detail?id=317

L'auteur n'a pas de date de sortie précise pour cette version, mais j'ai vu une publication qui indiquait que ce serait dans le mois ou les deux prochains.

John
la source
8

Une remarque importante: vous devez utiliser le "nom PostScript" associé à la police, pas son nom complet ou son nom de famille. Ce nom peut souvent être différent du nom normal de la police.

user576862
la source
7

suivez cette étape

1) Copiez votre police dans votre projet

2) ouvrez votre .plistfichier en mode code source ... (Remarque - Ne pas ouvririnfo.plist )

3) Avant cela - Faites un clic droit sur votre police et ouvrez-la dans fontforge ou un éditeur similaire et installdans votre système, il devrait êtreinstall

4) Tapez ceci

 <key>UIAppFonts</key>
<array>
    <string>MyriadPro.otf</string>
</array>

5) Tapez ce code dans votre class .m

 [lblPoints setFont:[UIFont fontWithName:@"Myriad Pro" size:15.0]];

Ici, les lblPoints seront modifiés en fonction de votre UILabel

Terminé!! Si votre police ne fonctionne toujours pas, vérifiez d'abord la compatibilité de vos polices

Kirtikumar A.
la source
1
pourquoi ne pas ouvrir info.plist?
Raptor
pourquoi l'espace entre Myraid & Pro au 5ème point alors qu'il n'y en a pas dans Plist au point 4?
jayant rawat
@jayantrawat Son nom de police qui est affiché dans le système après l'installation de la police, et .plist est le nom du fichier de police [.ttl ou otf]
Kirtikumar A.
@KirtikumarA. oui je l'ai eu..implémenté avec succès dans l'application ..
jayant rawat
@jayantrawat si ma solution aide alors je vous demande de donner un vote sur la réponse afin que les autres utilisateurs puissent prendre de l'aide de la même manière
Kirtikumar A.
6

Peut-être que l'auteur a oublié de donner à la police un nom Mac FOND ?

  1. Ouvrez la police dans FontForge puis allez dans Element> Font Info
  2. Il existe une option "Mac" où vous pouvez définir le nom FOND.
  3. Sous Fichier> Exporter la police, vous pouvez créer un nouveau ttf

Vous pouvez également essayer l'option "Apple" dans la boîte de dialogue d'exportation.

AVERTISSEMENT : je ne suis pas un développeur IPhone!

ByteNirvana
la source
6

J'ai essayé les différentes suggestions de cette page sur iOS 3.1.2 et voici mes conclusions:

La simple utilisation [UIFont fontWithName:size:]avec les polices du répertoire Resources ne fonctionnera pas, même si le nom FOND est défini à l'aide de FontForge.

[UIFont fontWithName:size:]fonctionnera si les polices sont chargées en premier à l'aide de GSFontAddFromFile. Mais GSFontAddFromFilene fait pas partie d'iOS 3.1.2, il doit donc être chargé dynamiquement comme décrit par @rpetrich.

Jacob Wallström
la source
5

Chercher ATSApplicationFontsPath

Une entrée plist simple qui vous permet d'inclure le (s) fichier (s) de police dans votre dossier de ressources d'application et ils "fonctionnent" simplement dans votre application.

Matt Sephton
la source
Avez-vous essayé cela sur l'appareil? Je n'ai eu aucune joie, et googler suggère que cette entrée plist n'est pas prise en charge sur iPhone, même si elle est documentée pour iPhone OS.
Airsource Ltd
1
Désolé, je ne l'utilise que dans une application OS X pour le moment.
Matt Sephton le
5

J'ai combiné certains des conseils de cette page en quelque chose qui fonctionne pour moi sur iOS 5.

Tout d'abord, vous devez ajouter la police personnalisée à votre projet. Ensuite, vous devez suivre les conseils de @iPhoneDev et ajouter la police à votre fichier info.plist.

Après cela, cela fonctionne:

UIFont *yourCustomFont = [UIFont fontWithName:@"YOUR-CUSTOM-FONT-POSTSCRIPT-NAME" size:14.0];
[yourUILabel setFont:yourCustomFont];

Cependant, vous devez connaître le nom Postscript de votre police. Suivez simplement les conseils de @Daniel Wood et appuyez sur commande-i pendant que vous êtes dans FontBook.

Ensuite, profitez de votre police personnalisée.

AaronBaker
la source
5

Ajoutez d'abord la police au format .odt à vos ressources, dans ce cas, nous utiliserons DINEngschriftStd.otf, puis utilisez ce code pour affecter la police à l'étiquette

[theUILabel setFont:[UIFont fontWithName:@"DINEngschriftStd" size:21]];

Pour vous assurer que votre police est chargée sur le projet, appelez simplement

NSLog(@"Available Font Families: %@", [UIFont familyNames]);

Sur le .plist, vous devez déclarer la police. Ajoutez simplement un enregistrement «Polices fournies par l'application» et ajoutez une chaîne d'élément 0 avec le nom de la police (DINEngschriftStd.otf)

Alejandro Luengo
la source
5

Pour iOS 3.2 et supérieur: utilisez les méthodes fournies par plusieurs ci-dessus, qui sont:

  1. Ajoutez votre fichier de police (par exemple, Chalkduster.ttf ) au dossier Resources du projet dans XCode.
  2. Ouvrez info.plist et ajoutez une nouvelle clé appelée UIAppFonts. Le type de cette clé doit être un tableau.
  3. Ajoutez votre nom de police personnalisé à ce tableau, y compris l'extension (" Chalkduster.ttf ").
  4. Utilisez [UIFont fontWithName:@"Real Font Name" size:16]dans votre application.

MAIS Le "vrai nom de police" n'est pas toujours celui que vous voyez dans Fontbook. La meilleure façon est de demander à votre appareil quelles polices il voit et quels sont les noms exacts.

J'utilise le uifont-name-grabber publié sur: uifont-name-grabber

Déposez simplement les polices que vous souhaitez dans le projet xcode, ajoutez le nom du fichier à sa liste et exécutez-le sur le périphérique pour lequel vous construisez, il vous enverra par e-mail une liste complète des polices en utilisant les noms UIFont fontWithName:attendus.

Jarson
la source
5

La meilleure solution consiste à ajouter une nouvelle propriété " Fonts provided by application" à votre info.plistfichier.

Ensuite, vous pouvez utiliser votre police personnalisée comme d'habitude UIFont.

RichX
la source
3

Il existe une nouvelle façon d'utiliser des polices personnalisées, à partir d'iOS 4.1. Il vous permet de charger des polices dynamiquement, que ce soit à partir de fichiers inclus avec l'application, de données téléchargées ou de tout ce que vous avez. Il vous permet également de charger des polices selon vos besoins, tandis que l'ancienne méthode les charge toutes au démarrage de l'application, ce qui peut prendre trop de temps si vous avez plusieurs polices.

La nouvelle méthode est décrite sur ios-dynamic-font-loading

Vous utilisez la CTFontManagerRegisterGraphicsFontfonction, en lui donnant un tampon avec vos données de police. Il est ensuite disponible pour UIFontet des vues Web, tout comme avec l'ancienne méthode. Voici l'exemple de code de ce lien:

NSData *inData = /* your font-file data */;
CFErrorRef error;
CGDataProviderRef provider = CGDataProviderCreateWithCFData((CFDataRef)inData);
CGFontRef font = CGFontCreateWithDataProvider(provider);
if (! CTFontManagerRegisterGraphicsFont(font, &error)) {
    CFStringRef errorDescription = CFErrorCopyDescription(error)
    NSLog(@"Failed to load font: %@", errorDescription);
    CFRelease(errorDescription);
}
CFRelease(font);
CFRelease(provider);
David M.
la source
J'ai utilisé ce code mais j'obtiens l'erreur & Impossible de charger la police: l'opération n'a pas pu être terminée. (erreur com.apple.coretext 105 - Impossible d'enregistrer le CGFont '<CGFont (0x14fe7df0): Shruti>')
Hiren
Selon la documentation, l'erreur 105 est kCTFontManagerErrorAlreadyRegistered«le fichier a déjà été enregistré dans la portée spécifiée». developer.apple.com/library/ios/#documentation/Carbon/Reference/…
David M.
3

Swift, façon codée: (fonctionne également avec swift 2.0)

Ajoutez les polices requises à votre projet (tout comme l'ajout d'images, faites simplement glisser vers Xcode), assurez-vous qu'elles sont ciblées sur votre projet,
ajoutez cette méthode et chargez des polices personnalisées (recommandé dans appDelegate didFinishLaunchingWithOptions)

func loadFont(filePath: String) {

    let fontData = NSData(contentsOfFile: filePath)!

    let dataProvider = CGDataProviderCreateWithCFData(fontData)
    let cgFont = CGFontCreateWithDataProvider(dataProvider)!

    var error: Unmanaged<CFError>?
    if !CTFontManagerRegisterGraphicsFont(cgFont, &error) {
        let errorDescription: CFStringRef = CFErrorCopyDescription(error!.takeUnretainedValue())
        print("Unable to load font: %@", errorDescription, terminator: "")
    }

}

Exemple d'utilisation:

if let fontPath = NSBundle.mainBundle().pathForResource("My-Font", ofType: "ttf"){
      loadFont(fontPath)
}

Utilisez la police:

UIFont(name: "My-Font", size: 16.5)
Daniel Krom
la source
Je me demande simplement pourquoi il ne suffit pas d'ajouter la police dans votre Info.plist, cela semble beaucoup plus de travail pour essentiellement la même chose.
Stephen Jesse
2

Vous pouvez ajouter les fichiers "FONT" requis dans le dossier des ressources. Allez ensuite sur le projetInfo.plist fichier et utilisez la CLÉ "Polices fournies par l'application" et la valeur "NOM DE LA POLICE".

Ensuite, vous pouvez appeler la méthode [UIFont fontwithName:@"FONT NAME" size:12];

Nishan29
la source
1

J'ai rendu tout possible mais les nouvelles polices n'apparaissent pas alors j'ai trouvé la solution:

Lorsque vous faites glisser les fichiers fot (otf ou ttf), n'oubliez pas de cocher la case sous "Ajouter aux cibles".

Après cela, votre police apparaîtra et tout fonctionnera bien.

ElizaS
la source
1

Bien que certaines des réponses ci-dessus soient correctes, j'ai écrit un didacticiel visuel détaillé pour les personnes ayant encore des problèmes avec les polices.

Les solutions ci-dessus qui vous indiquent d'ajouter la police à la liste et d'utiliser

[self.labelOutlet setFont:[UIFont fontWithName:@"Sathu" size:10]];

sont les bons. Veuillez maintenant utiliser toute autre méthode de piratage. Si vous rencontrez toujours des problèmes pour trouver et ajouter des noms de police, voici le didacticiel -

Utilisation de polices personnalisées dans l'application iOS

Bharat Gulati
la source
Je viens d'essayer ça. Semble fonctionner, mais ma police est minuscule, quelle que soit la taille que je l'ai définie. Pour ce que ça vaut, j'utilise un fichier OTF disponible gratuitement: philsfonts.com/index.php/free_fonts
ari gold
Essayez-le avec n'importe quelle autre police personnalisée et si le problème persiste, faites-le moi savoir. Si cela fonctionne ainsi, il y a un problème avec votre police.
Bharat Gulati
1

oui, vous pouvez utiliser une police personnalisée dans votre application

étape par étape qui suit:

Ajoutez vos fichiers de polices personnalisés dans votre projet dans les fichiers de prise en charge

Ajoutez une clé à votre fichier Info.plist appelée UIAppFonts.

Faire de cette clé un tableau

Pour chaque police dont vous disposez, entrez le nom complet de votre fichier de police (y compris l'extension) en tant qu'éléments du tableau UIAppFonts

Save Info.plist Maintenant dans votre application, vous pouvez simplement appeler [UIFont fontWithName: @ "votre nom de police personnalisé" taille: 20] pour obtenir la police personnalisée à utiliser avec vos UILabels après avoir appliqué ceci si vous n'obtenez pas la police correcte, puis vous double-cliquez sur la police personnalisée, et voyez attentivement le nom de la police du haut est en cours et copiez cette police, collez-la ici [UIFont fontWithName: @ "ici après votre nom de police personnalisé" taille: 20]

j'espère que vous obtiendrez la bonne réponse

Akhil Bhadauria
la source
1

oui, vous pouvez utiliser une police personnalisée dans votre application

étape par étape qui suit:

  • Ajoutez vos fichiers de polices personnalisés dans votre projet dans les fichiers de prise en charge
  • Ajoutez une clé à votre Info.plist fichier appelée UIAppFonts.
  • Faire de cette clé un tableau
  • Pour chaque police dont vous disposez, entrez le nom complet de votre fichier de police (y compris l'extension) en tant qu'éléments du tableau UIAppFonts
  • Enregistrer Info.plist maintenant dans votre application, vous pouvez simplement appeler [UIFont fontWithName:@"your Custom font Name" size:20]pour obtenir la police personnalisée à utiliser avec votreUILabels

après avoir appliqué ceci si vous n'obtenez pas la police correcte, vous double-cliquez sur la police personnalisée et voyez attentivement le nom de la police du haut est en train de venir et copiez cette police, collez, ici [UIFont fontWithName:@" here past your Custom font Name" size:20] j'espère que vous obtiendrez la bonne réponse

user2691469
la source