2011-07-18 19 views
8

Estoy tratando de obtener un conjunto de fuentes Neo Sans Pro que funcionen en el iPhone. Tengo cuatro pesos: Light, Regular, Medium, Bold como archivos OTF (NeoSansPro-Light.otf, -Regular.otf, etc.). Los archivos están incluidos en la compilación y están registrados en info.plist.Las fuentes personalizadas no se muestran correctamente en iOS

Llamar a [UIFont fontNamesForFamilyName:@"Neo Sans Pro"] devuelve una matriz con 4 entradas, p. "NeoSansPro-Light".

Puedo recuperar objetos de fuentes para cada una de estas cadenas usando UIFont fontWithName:size:.

Sin embargo, cuando dibujo texto con ellos, las versiones Light, Regular y Medium dibujan exactamente lo mismo, y se parecen a la versión Light. La versión Negrita se dibuja de manera diferente.

De acuerdo con el Libro de fuentes, cada archivo de fuente contiene diferentes glifos.

Estoy completamente perplejo, ¿alguna pista de lo que tengo que hacer?

[Agregado] Un poco más de investigación:

NSArray *fonts = [UIFont fontNamesForFamilyName:@"Neo Sans Pro"]; 

    for (NSString *fname in fonts) { 
     UIFont *font = [UIFont fontWithName:fname size:12.0]; 
     NSLog(@"name: %@ font: %@", fname, font); 
    } 

La ejecución de este código da el siguiente resultado de registro:

name: NeoSansPro-Light font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px 
name: NeoSansPro-Regular font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px 
name: NeoSansPro-Medium font: <UICFFont: 0x66304a0> font-family: "Neo Sans Pro"; font-weight: normal; font-style: normal; font-size: 12px 
name: NeoSansPro-Bold font: <UICFFont: 0xaa06070> font-family: "Neo Sans Pro"; font-weight: bold; font-style: normal; font-size: 12px 

Así que las tres fuentes que muestran la misma realidad son los mismos. Pero hay cuatro pesos de fuente y cuatro fuentes en la compilación.

+0

También se intentó como archivos TTF, pero sucedió lo mismo –

Respuesta

10

Parece que este es el mismo problema que aquí: Including multiple fonts of the same family in an iPad application

Parece que la arquitectura de fuentes IOS se confunde si hay múltiples fuentes en la misma familia de fuentes, y no devolver la fuente correcta. La solución es editar manualmente la información de la familia de fuentes (usando algo como Font Forge a diferentes valores.

P. Ej. Para la fuente Neo Sans Pro Light, configure la familia de fuentes (en los nombres PSNames y TTF) en "NSP Light". hacer lo mismo para Neo Sans Pro regular -.> NSP regular etc.

a continuación, puede hacer referencia a la fuente por el nombre original por ejemplo, "NeoSansPro-Light"

feo, pero funciona

+2

Algunas aclaraciones: En Font Forge, esto está disponible en el menú 'Elemento' en 'Información de fuente'. Además, en realidad no importa a qué se ajuste la familia de fuentes, básicamente lo estás cambiando de la familia original para que iOS lo encuentre por su nombre único, no por familia/peso. – alalonde

0

fuente de forja me pareció demasiado, así que creé un método que lee las descripciones de las fuentes en el fontsArray de un cert Ain familia y devuelve la fuente apropiada.

- (UIFont*) getFontWithFamilyName:(NSString*)familyName bold:(Boolean)bold italic:(Boolean)italic size:(uint)size { 
    NSArray *fonts = [UIFont fontNamesForFamilyName:familyName]; 
    for (NSString *fname in fonts) { 
     UIFont *font = [UIFont fontWithName:fname size:size]; 
     Boolean isBold = [[font description] rangeOfString:@"bold"].location != NSNotFound; 
     Boolean isItalic = [[font description] rangeOfString:@"italic"].location != NSNotFound; 
     if (isBold == bold && isItalic == italic) { 
      return font; 
     } 
    } 
    //-- font was not found, provide system font bold or normal 
    if (bold) { 
     return [UIFont boldSystemFontOfSize:size]; 
    } else { 
     return [UIFont systemFontOfSize:size]; 
    } 
} 
+0

¿Ha probado esto con varias fuentes de la misma familia instalada? El problema que estaba viendo era que [UIFont fontWithName:] no funcionaba, por lo que su solución tampoco lo haría –

+0

Obviamente, esto funciona si [UIFont fontWithName:] devuelve algo. Si no es así para ti, no estoy seguro de si el problema es que tienes varias fuentes de la misma familia. Varias fuentes deben devolver varias entradas de matriz – Elendurwen

+1

Acepto que [UIFont fontWithName] * debe * devolver varios elementos, pero como * no * hay un error en el código de Apple. Por lo tanto, trabajar alrededor de arriba. –

0

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 eran agregado en el info.plist de mi aplicación, pero por alguna razón, mi aplicación solo podía leer las fuentes en negrita, negrita y cursiva. No pude leer la fuente normal cuando intenté cargarlo. Sin embargo, después de imprimir los nombres de las fuentes, se supo que Arvo-Regular era reconocido como Arvo en mi aplicación.

Cuestiones relacionadas