Acabo de actualizar mi iPod touch a iOS 7.0.3 y "HelveticaNeue-Italic" parece haber desaparecido. Cuando consulto por teléfono con:
[UIFont fontNamesForFamilyName:@"Helvetica Neue"]
Obtengo los siguientes fontNames (13):
HelveticaNeue-BoldItalic,
HelveticaNeue-Light,
HelveticaNeue-UltraLightItalic,
HelveticaNeue-CondensedBold,
HelveticaNeue-MediumItalic,
HelveticaNeue-Thin,
HelveticaNeue-Medium,
HelveticaNeue-ThinItalic,
HelveticaNeue-LightItalic,
HelveticaNeue-UltraLight,
HelveticaNeue-Bold,
HelveticaNeue,
HelveticaNeue-CondensedBlack
Cuando hago la misma consulta ejecutándose en el simulador, obtengo (14):
HelveticaNeue-BoldItalic,
HelveticaNeue-Light,
**HelveticaNeue-Italic,**
HelveticaNeue-UltraLightItalic,
HelveticaNeue-CondensedBold,
HelveticaNeue-MediumItalic,
HelveticaNeue-Thin,
HelveticaNeue-Medium,
HelveticaNeue-Thin_Italic,
HelveticaNeue-LightItalic,
HelveticaNeue-UltraLight,
HelveticaNeue-Bold,
HelveticaNeue,
HelveticaNeue-CondensedBlack
¿Alguien más vio esto?
---- Nueva información ----
Volví al video de la WWDC 2013 "Uso de fuentes con el kit de texto" y la parte interesante comienza a las 12:22. El presentador habla de "MetaFonts" en OS X como ejemplo. Lo que dice es que la fuente debajo de llamadas como:
+ (NSFont *)messageFontOfSize:(CGFloat)fontSize
no se garantiza que devuelvan la misma fuente subyacente en todas las versiones o incluso en diferentes usos. Su ejemplo fue Lucinda Grande. No parecía estar diciendo que el uso de "HelveticaNeue-Italic" pudiera pasar de una versión a otra.
Así que construí un experimento en iOS 7. Creé mi fuente con el siguiente código:
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];
Obtuve un UIFont válido para fontWithDescriptor y cuando consulté la fuente para fontName con:
[fontWithDescriptor fontName]
Regresé...
HelveticaNeue-Italic
¿¿¿Imagínate???
Entonces, una posible respuesta a 7.0.3 parece ser el código anterior.
---- Más retoques ----
Aunque la solución funcionó anteriormente, no creo que sea formalmente correcta. He cambiado a la siguiente solución
UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];
UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];
Esto parece hacer todas las cosas correctas. Probé el enfoque anterior con otra familia de fuentes y pareció confundirse con fontName y fontFamily. ¡Espero que esto ayude!
fuente
Respuestas:
Este es un error de Apple. Se introdujo en iOS 7.0.3 y aún no se ha corregido a partir de iOS 7.0.4. Parece estar corregido en la vista previa para desarrolladores de iOS 7.1. Aquí hay un código (proporcionado por Apple en los foros de desarrollo) para solucionar el problema:
También vale la pena señalar que en la versión actual de Xcode (5.0.1 (5A2053)) esta fuente no aparece como una opción en la lista desplegable Fuente en Interface Builder. Entonces, si configuró previamente una etiqueta con esta fuente, notará que la interfaz de usuario se confunde y la etiqueta termina asignándose otra fuente y tamaño en tiempo de ejecución (consulte la captura de pantalla de la interfaz de usuario a continuación). Para las etiquetas configuradas en guiones gráficos / xibs, deberá restablecer la fuente en el código.
Como referencia, aquí está la discusión del problema en los foros de desarrollo.
fuente
Este es un error en iOS 7.0.3.
Si está utilizando explícitamente HelveticaNeue-Italic, puede crearlo utilizando esta solución alternativa:
Sin embargo, tenga en cuenta que esta solución solo funcionará en iOS 7; no se puede implementar en iOS 6 (porque
CTFontRef
yUIFont
no fueron puenteados sin cargo en iOS 6). Sin embargo, en iOS 6 solo puede usar su código de búsqueda de fuentes habitual.fuente
Creo que es un error. Lo he presentado como tal a Apple. Lamentablemente para mí, mi aplicación ahora se bloquea. La fuente se usa en una biblioteca de terceros que estoy usando. Mucha gente en Twitter informa de problemas.
fuente
Si está accediendo de forma dinámica el tipo de letra cursiva a continuación, en lugar de acceder a la fuente por su nombre
[UIFont fontWithName:@"HelveticaNeue-Italic" size:15.0f]
utilizar[UIFont italicSystemFontOfSize:15.0f]
esto está muy bien trabajando para mí.fuente
fontWithName:size:
primero y, si el resultado esnil
, ejecutaritalicSystemFontOfSize:
, que siempre debería devolver algo y al menos evitar un bloqueo.Actualmente no encuentro la sesión, pero dijeron algo que no puede confiar en que las fuentes ya estén disponibles en iOS7. Incluso pueden cambiar durante la vida útil de su aplicación. Lo que básicamente significa: cuando especificas fuentes en tu aplicación, estás jodido, ¡usa descriptores de fuentes o fuentes preferidas en su lugar!
fuente
Encontré otra solución que parece funcionar. Salí de una llamada a
[[UIFont italicSystemFontOfSize:12.0] fontName]
para ver cuál es la fuente en cursiva del sistema real que se está utilizando, y devolvió ".HelveticaNeueInterface-ItalicM3". Una prueba simple muestra que usar
[UIFont fontWithName:@".HelveticaNeueInterface-ItalicM3" size:12.0]
¡trabajos! Comparándolos visualmente, la fuente devuelta por la llamada anterior parece ser exactamente la misma que la fuente original 'HelveticaNeue-Italic'.
Este problema es casi con certeza un error ... Helvetica Neue es la fuente predeterminada en iOS 7, por lo que las fuentes de esa familia no deberían faltar. Todo funcionó bien en Xcode v.5.0, pero inmediatamente después de actualizar a 5.0.1, este problema comenzó a aparecer. Presenté un error con Apple notando eso. Hasta entonces, esta solución parece funcionar ...
fuente
El informe de error que presenté a Apple se ha marcado como "Cerrado como duplicado". Espero que eso signifique que lo consideren un error. Sin embargo, iOS 7.0.4 no corrige el error.
fuente
El error parece haberse solucionado en iOS 7.1 beta 1.
[UIFont fontWithName:@"HelveticaNeue-Italic" size:size];
devuelve una fuente.fuente
Tuve un mismo bloqueo que solía fallar en iOS 7.0.3 y 7.0.4 solamente, y funciona perfectamente en todas las demás versiones. Después de tanta investigación, me enteré de que @ "HelveticaNeue-Italic" no está disponible en las versiones de iOS 7.0.3 y 7.0.4, por lo que solía superar el bloqueo en esas versiones.
He solucionado el problema con el siguiente código, esto podría ser útil para alguien necesitado.
El registro de fallos es:
fuente
Como nadie ha mencionado nada sobre el soporte en cursiva de HelveticaNeue en UIWebView, pensé en compartir mis hallazgos.
A partir de 7.0.6, todavía falta la cursiva regular en UIWebView y parece recurrir a UltraLightItalic en la misma familia. Esto se ve un poco extraño cuando está justo al lado del texto de HelveticaNeue sin cursiva de peso normal, ya que es mucho más ligero.
Mi solución fue usar Helvetica ordinaria en lugar de HelveticaNeue, pero solo para las cursivas. Entonces, si tiene CSS que se ve así:
... agregaría otras dos clases para anular
<i>
y<em>
:La fuente en cursiva Helvetica normal se ve bien y no creo que nadie se dé cuenta de que no es HelveticaNeue.
fuente