Je viens de mettre à niveau mon iPod touch vers iOS 7.0.3 et "HelveticaNeue-Italic" semble avoir disparu. Lorsque j'interroge au téléphone avec:
[UIFont fontNamesForFamilyName:@"Helvetica Neue"]
J'obtiens les fontNames suivants (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
Lorsque je fais la même requête en cours d'exécution dans le simulateur, j'obtiens (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
Quelqu'un d'autre a vu ça?
---- Nouvelle information ----
Je suis retourné à la vidéo de la WWDC 2013 "Using Font with Text Kit" et la partie intéressante commence à 12h22. Le présentateur parle de "MetaFonts" dans OS X à titre d'exemple. Ce qu'il dit, c'est que la police sous des appels comme:
+ (NSFont *)messageFontOfSize:(CGFloat)fontSize
ne sont pas garantis de renvoyer la même police sous-jacente entre les versions ou même les utilisations différentes. Son exemple était Lucinda Grande. Il ne semblait pas dire que l'utilisation de "HelveticaNeue-Italic" pouvait passer d'une version à l'autre.
J'ai donc construit une expérience sous iOS 7. J'ai créé ma police avec le code suivant:
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];
J'ai récupéré un UIFont valide pour fontWithDescriptor et quand j'ai interrogé la police pour le fontName avec:
[fontWithDescriptor fontName]
Je suis rentré...
HelveticaNeue-Italic
Allez comprendre???
Donc, une réponse possible à 7.0.3 semble être le code ci-dessus.
---- Autres modifications ----
Bien que la solution ait fonctionné ci-dessus, je ne pense pas qu'elle soit formellement correcte. Je suis passé à la solution suivante
UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];
UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];
Cela semble faire toutes les bonnes choses. J'ai essayé l'approche précédente avec une autre famille de polices et cela semblait être confondu avec le fontName et la fontFamily. J'espère que cela t'aides!
la source
Réponses:
C'est un bogue Apple. Il a été introduit dans iOS 7.0.3 et n'a pas encore été corrigé depuis iOS 7.0.4. Il semble être corrigé dans l'aperçu développeur d'iOS 7.1. Voici le code (fourni par Apple dans les forums de développement) pour contourner le problème:
Il convient également de noter que dans la version actuelle de Xcode (5.0.1 (5A2053)), cette police n'est pas répertoriée comme une option dans la liste déroulante Police dans Interface Builder. Donc, si vous avez précédemment configuré une étiquette avec cette police, vous remarquerez que l'interface utilisateur est confuse et que l'étiquette finit par se voir attribuer une autre police et une autre taille lors de l'exécution (voir la capture d'écran de l'interface utilisateur ci-dessous). Pour les étiquettes configurées dans les storyboards / xibs, vous devrez réinitialiser la police dans le code.
Pour référence, voici la discussion du problème dans les forums de développement.
la source
Il s'agit d'un bogue dans iOS 7.0.3.
Si vous utilisez explicitement HelveticaNeue-Italic, vous pouvez le créer en utilisant cette solution de contournement:
Notez, cependant, que cette solution de contournement ne fonctionnera que sur iOS 7; il n'est pas déployable sur iOS 6 (car
CTFontRef
etUIFont
n'était pas ponté sans frais sur iOS 6). Cependant, sur iOS 6, vous pouvez simplement utiliser votre code de recherche de police habituel.la source
Je pense que c'est un bug. Je l'ai déposé en tant que tel auprès d'Apple. Malheureusement pour moi, mon application plante maintenant. La police est utilisée dans une bibliothèque tierce que j'utilise. De nombreuses personnes sur Twitter signalent des problèmes.
la source
Si vous accédez dynamiquement à la police italique, au lieu d'accéder à la police par son nom,
[UIFont fontWithName:@"HelveticaNeue-Italic" size:15.0f]
utilisez[UIFont italicSystemFontOfSize:15.0f]
cela fonctionne très bien pour moi.la source
fontWithName:size:
abord, et si le résultat estnil
, exécuteritalicSystemFontOfSize:
, ce qui devrait toujours renvoyer quelque chose et au moins éviter un crash.Je ne trouve actuellement pas la session, mais ils ont dit quelque chose que vous ne pouvez plus compter sur les polices disponibles sur iOS7. Ils peuvent même changer pendant la durée de vie de votre application. Ce qui signifie essentiellement: lorsque vous spécifiez des polices dans votre application, vous êtes foutu, utilisez plutôt des descripteurs de police ou des polices préférées!
la source
J'ai trouvé une autre solution qui semble fonctionner. J'ai déconnecté un appel à
[[UIFont italicSystemFontOfSize:12.0] fontName]
pour voir quelle est la police italique système utilisée, et elle a renvoyé ".HelveticaNeueInterface-ItalicM3". Un test simple montre que l'utilisation
[UIFont fontWithName:@".HelveticaNeueInterface-ItalicM3" size:12.0]
travaux! En les comparant visuellement, la police renvoyée par l'appel ci-dessus semble être exactement la même que la police d'origine «HelveticaNeue-Italic».
Ce problème est certainement un bug ... Helvetica Neue est la police par défaut dans iOS 7, donc les polices de cette famille ne devraient pas manquer. Tout fonctionnait bien dans Xcode v.5.0, mais immédiatement après la mise à niveau vers la version 5.0.1, ce problème a commencé à apparaître. J'ai signalé un bug avec Apple en notant autant. Jusque-là, cette solution semble fonctionner ...
la source
Le rapport de bogue que j'ai déposé auprès d'Apple a été marqué "Clôturé en double". J'espère que cela signifie qu'ils le considèrent comme un bogue. Cependant, iOS 7.0.4 ne résout pas le bogue.
la source
Le bogue semble avoir été corrigé dans iOS 7.1 beta 1.
[UIFont fontWithName:@"HelveticaNeue-Italic" size:size];
renvoie une police.la source
J'ai eu le même crash qui se produisait dans iOS 7.0.3 et 7.0.4 uniquement, et fonctionne parfaitement dans toutes les autres versions. Après tant d'investigations, j'ai appris que @ "HelveticaNeue-Italic" n'est pas disponible dans les versions iOS 7.0.3 et 7.0.4, de sorte que j'avais l'habitude de planter ci-dessus dans ces versions.
J'ai résolu le problème avec le code ci-dessous, cela pourrait être utile à quelqu'un dans le besoin.
Le journal des pannes est:
la source
Puisque personne n'a mentionné quoi que ce soit à propos de la prise en charge de l'italique HelveticaNeue dans UIWebView, j'ai pensé partager mes découvertes.
À partir de la version 7.0.6, l'italique normal est toujours manquant dans UIWebView et semble revenir à UltraLightItalic dans la même famille. Cela semble un peu étrange quand il est juste à côté du texte HelveticaNeue non italique de poids normal, car il est beaucoup plus léger.
Ma solution de contournement était d'utiliser Helvetica ordinaire au lieu d'HelveticaNeue, mais uniquement pour les italiques. Donc, si vous avez un CSS qui ressemble à ceci:
... vous ajouteriez deux autres classes à remplacer
<i>
et<em>
:La police italique Helvetica classique a l'air bien et je ne pense pas que quiconque remarquerait que ce n'est pas HelveticaNeue.
la source