Certaines polices ne s'affiche pas?
j'ai une liste de noms de police dans mon application, qui sont tous affichés dans la police qu'ils représentent. Les trois suivantes ne fonctionnent pas cependant:
ArialRoundedMTBold
ChalkboardSE-Bold
TrebuchetMS-Bold
au lieu de cela, ils s'affichent dans la police standard.
vous savez pourquoi ils ne viennent pas?
5 réponses
Comment configurer une police personnalisée
pour utiliser une police personnalisée (non incluse dans iOS), vous devez éditer votre fichier <appname>-Info.plist
et créer une nouvelle clé UIAppFonts
avec le tableau de type, où chaque élément du tableau est une chaîne avec le nom de votre fichier de police. Exemple: VAGRoundedStd-Light.ttf
. Vous devez également ajouter le fichier à votre projet.
Note: Lorsque vous tapez UIAppFonts
et appuyez sur entrée, la clé est converti en "Polices fournies par application".
cependant, lorsque vous utilisez la police dans Interface Builder (ou avec UIFont
) vous n'utilisez pas le nom de fichier de la police, mais le nom qui apparaît lorsque vous ouvrez la police dans l'application Font Book de votre Mac. Pour l'exemple précédent, ce serait VAG Rounded Std Light
.
OS X est plus tolérant que iOS digérant les formats TrueType, donc à de rares occasions, vous pouvez trouver une police qui fonctionne dans OS X mais pas dans iOS. Si cela se produit, remplacez la police pour voir si au moins vous avez eu le bon processus.
comment charger une police programmatically
cela résout le cas où la licence de police exige que vous distribuiez la police cryptée.
- la première étape consiste à chiffrer et déchiffrer la police avec n'importe quoi algorithme que vous voyez approprié.
- chargez la police comme un objet NSData et inversez le cryptage.
- enregistrez la police de manière programmatique.
cette recette suivante est tirée de chargement dynamique des polices iOS par Marco Arment. Il rend les polices disponibles dans UIFont et UIWebView. Le même code peut être utilisé pour charger des polices à partir d'Internet.
NSData *inData = /* your decrypted 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);
comment charger plus de deux polices de la même famille
C'est le cas où iOS refuse de charger plus de deux polices de la même famille.
Voici une solution de contournement de code de l'utilisateur stackoverflow Evadne Wu . Il suffit de coller ce qui suit dans votre délégué app (notez qu'il utilise deux cadres):
#import <CoreText/CoreText.h>
#import <MobileCoreServices/MobileCoreServices.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
CTFontManagerRegisterFontsForURLs((__bridge CFArrayRef)((^{
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *resourceURL = [[NSBundle mainBundle] resourceURL];
NSArray *resourceURLs = [fileManager contentsOfDirectoryAtURL:resourceURL includingPropertiesForKeys:nil options:0 error:nil];
return [resourceURLs filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSURL *url, NSDictionary *bindings) {
CFStringRef pathExtension = (__bridge CFStringRef)[url pathExtension];
NSArray *allIdentifiers = (__bridge_transfer NSArray *)UTTypeCreateAllIdentifiersForTag(kUTTagClassFilenameExtension, pathExtension, CFSTR("public.font"));
if (![allIdentifiers count]) {
return NO;
}
CFStringRef utType = (__bridge CFStringRef)[allIdentifiers lastObject];
return (!CFStringHasPrefix(utType, CFSTR("dyn.")) && UTTypeConformsTo(utType, CFSTR("public.font")));
}]];
})()), kCTFontManagerScopeProcess, nil);
return YES;
}
Disponible en tant que gist . Commenté dans le blog de l'auteur: Chargement 2+ polices sur iOS à partir de la même famille de polices .
Une alternative, plus impliqués contournement de pixeldock.com :
si vous ajoutez plus de 2 variantes de la même famille de polices (par exemple "Normal", "Bold" et "Extended"), seulement les deux dernières variantes de police qui vous avez ajouté au projet d'être utilisable.
si vous voyez ceci se produire, c'est une limitation de votre version SDK, et la seule façon de s'en sortir est d'éditer la famille de police avec un éditeur de police comme Fontforge. De nouveau, de pixeldock.com :
- ouvrez votre police de Fontforge
- Goto "Élément" - > "Police des Infos" et modifier le "Nom de Famille" champ
- Goto ‘Element’ -> ‘TTF Noms "et modifier les champs "Famille" et "Préféré" Famille
- Goto ‘Fichier’ -> ‘Générer des Polices " et enregistrez votre édité police
Seulement sous-ensemble de Mac OS polices sont disponibles pour iOS. Si vous définissez une police qui n'est pas disponible, elle sera affichée comme L'Helvetica standard.
J'utilisais une police Google nommée Arvo. Il avait les fichiers suivants:
Arvo-Regular.ttf Arvo-Bold.ttf Arvo-BoldItalic.ttf Arvo-Italic.ttf Ces noms ont été ajoutés dans les informations de mon application.plist mais pour une raison quelconque, mon application ne pouvait lire que les polices de caractères gras, bolditalic et italic. Il ne pouvait pas lire la police normale quand j'ai essayé de le charger. Cependant, après avoir imprimé les noms de police, il est ressorti Qu'Arvo-Regular était reconnu comme Arvo dans mon application.
j'ai eu un problème similaire avec le fait de ne pas trouver Chalkduster - même si IB l'a répertorié comme une police et il est répertorié comme une police IOS. J'ai découvert que la liste des polices sur iPhone et iPad n'est pas identique.
Chalkduster est disponible pour iPad mais pas pour iPhone. Le tableau est disponible sur iPad 4.x mais pas 3.x. Il est disponible sur iPhone 3.x et 4.x.
plus de détails ici: http://www.whatsyourdigitaliq.com/2011/05/11/fonts-available-in-various-versions-of-ios /
Ouvrir l'application Livre des Polices. Si vous avez installé les polices vous-même, allez à user, recherchez les polices que vous voulez et utilisez le nom PostScript de la police dans votre projet xcode.
il devrait fonctionner même pour des variations de police différentes de la même famille.