Ciertas fonts no aparecen?

Tengo una lista de nombres de fonts en mi aplicación, que se muestran en la fuente que representan. Los siguientes tres no funcionan:

ArialRoundedMTBold
ChalkboardSE-Bold
TrebuchetMS-Bold

En cambio, se muestran en la fuente estándar.

¿Alguna idea de por qué estos pueden no aparecer?

Cómo configurar una fuente personalizada

Para usar una fuente personalizada (una no incluida en iOS), debe editar su archivo -Info.plist y crear una nueva clave UIAppFonts con type array, donde cada elemento de la matriz es una cadena con el nombre de su fuente archivo. Ejemplo: VAGRoundedStd-Light.ttf . También debe agregar el archivo a su proyecto.

UIAppFonts

Nota: Cuando UIAppFonts y presiona enter, la clave se convierte en “Fuentes proporcionadas por la aplicación”.

Sin embargo, cuando utiliza la fuente en Interface Builder (o con UIFont ) no utiliza el nombre de archivo de la fuente, sino el nombre que aparece cuando abre la fuente en la aplicación Font Book de su Mac. Para el ejemplo anterior, sería VAG Rounded Std Light .

Libro de fuentes

OS X es más tolerante que iOS digiriendo formatos TrueType, por lo que en raras ocasiones puede encontrar una fuente que funcione en OS X pero no en iOS. Si eso sucede, reemplace la fuente para ver si al menos usted obtuvo el proceso correcto.

Cómo cargar una fuente mediante progtwigción

Esto resuelve el caso donde la licencia de fuente requiere que distribuya la fuente encriptada.

  1. El primer paso es cifrar y descifrar la fuente con el algoritmo que mejor le parezca.
  2. Cargue la fuente como un objeto NSData e invierta el cifrado.
  3. Registre la fuente programáticamente.

La siguiente receta proviene de cargar fonts de iOS dinámicamente por Marco Arment. Hace que las fonts estén disponibles en UIFont y UIWebView. El mismo código se puede usar para cargar fonts desde 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); 

Cómo cargar más de dos fonts de la misma familia

Este es el caso donde iOS se niega a cargar más de dos fonts de la misma familia.

Aquí hay una solución del código del usuario de stackoverflow Evadne Wu . Simplemente inserte lo siguiente en su delegado de la aplicación (tenga en cuenta que utiliza dos marcos):

 #import  #import  - (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 como esencia Comentó en el blog de autor: Cargando 2+ fonts en iOS de la misma familia de fonts .


Una solución alternativa más involucrada de pixeldock.com :

Si agrega más de 2 variantes de fuente de la misma familia de fonts (por ejemplo, “Normal”, “Negrita” y “Extendida”), solo se podrán usar las dos últimas variantes de fuente que haya agregado al proyecto.

Si ve que esto sucede, es una limitación de su versión de SDK, y la única manera de hacerlo es editando la familia de fonts con un editor de fonts como Fontforge. De nuevo, desde pixeldock.com :

  1. Abre tu fuente en Fontforge
  2. Ir a ‘Elemento’ -> ‘Información de fuente’ y cambiar el campo ‘Nombre de familia’
  3. Goto ‘Element’ -> ‘TTF Names’ y cambiar los campos ‘Family’ y ‘Preferred Family’
  4. Ir a ‘Archivo’ -> ‘Generar fonts’ y guardar su fuente editada

Solo un subconjunto de fonts Mac OS está disponible en iOS. Si configura una fuente que no está disponible, se mostrará como Helvetica estándar.

Estaba usando una fuente de Google llamada Arvo. Tenía los siguientes archivos:

Arvo-Regular.ttf Arvo-Bold.ttf Arvo-BoldItalic.ttf Arvo-Italic.ttf Estos nombres se agregaron a info.plist de mi aplicación, pero por alguna razón, mi aplicación solo podía leer las fonts en negrita, negrita y cursiva. No pude leer la fuente normal cuando intenté cargarlo. Sin embargo, después de imprimir los nombres de las fonts, se supo que Arvo-Regular era reconocido como Arvo en mi aplicación.

Tuve un problema similar al no encontrar Chalkduster, a pesar de que el IB lo listó como una fuente y aparece como una fuente IOS. Descubrí que la lista de fonts en iPhone y iPad no es idéntica.

Chalkduster está disponible para iPad pero no para iPhone. Chalkboard está disponible en iPad 4.x pero no 3.x. Está disponible en iPhone 3.xy 4.x.

Más detalles aquí: http://www.whatsyourdigitaliq.com/2011/05/11/fonts-available-in-various-versions-of-ios/

Abra la aplicación de libro de fonts. Si instaló las fonts usted mismo, vaya al usuario, busque las fonts que desee y use el nombre PostScript de la fuente en su proyecto xcode.

Debería funcionar incluso para diferentes variaciones de fuente de la misma familia.