Acabei de atualizar meu iPod touch para iOS 7.0.3 e "HelveticaNeue-Italic" parece ter desaparecido. Quando faço uma consulta ao telefone com:
[UIFont fontNamesForFamilyName:@"Helvetica Neue"]
Eu obtenho os seguintes 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
Quando faço a mesma consulta em execução no simulador, recebo (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
Alguém mais viu isso?
---- Nova informação ----
Voltei para o vídeo WWDC 2013 "Using Font with Text Kit" e a parte interessante começa às 12h22. O apresentador fala sobre "MetaFonts" no OS X como um exemplo. O que ele diz é que a fonte em chamadas como:
+ (NSFont *)messageFontOfSize:(CGFloat)fontSize
não é garantido que retornem a mesma fonte subjacente em todas as versões ou mesmo em usos diferentes. Seu exemplo foi Lucinda Grande. Ele não parecia estar dizendo que o uso de "HelveticaNeue-Italic" poderia ir de uma versão para outra.
Então, construí um experimento no iOS 7. Criei minha fonte com o seguinte código:
UIFontDescriptor *fontDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Helvetica Neue" size:16.0];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
UIFont *fontWithDescriptor = [UIFont fontWithDescriptor:symbolicFontDescriptor size:16.0];
Eu recebi um UIFont válido para fontWithDescriptor e quando consultei a fonte para fontName com:
[fontWithDescriptor fontName]
Eu voltei...
HelveticaNeue-Italic
Vai saber???
Portanto, uma possível resposta para 7.0.3 parece ser o código acima.
---- Ajustes adicionais ----
Embora a solução tenha funcionado acima, não acho que seja formalmente correta. Eu mudei para a seguinte solução
UIFontDescriptor *fontDescriptor = [[UIFontDescriptor alloc] init];
UIFontDescriptor *fontDescriptorForHelveticaNeue = [fontDescriptor fontDescriptorWithFamily:@"Helvetica Neue"];
UIFontDescriptor *symbolicFontDescriptor = [fontDescriptorForHelveticaNeue fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic];
textFont = [UIFont fontWithDescriptor:symbolicFontDescriptor size:textFontPointSize];
Isso parece fazer todas as coisas certas. Eu tentei a abordagem anterior com outra família de fontes e pareceu ficar confusa com the fontName e fontFamily. Espero que isto ajude!
fonte
Respostas:
Este é um bug da Apple. Ele foi introduzido no iOS 7.0.3 e ainda não foi corrigido no iOS 7.0.4. Parece ter sido corrigido na visualização do desenvolvedor do iOS 7.1. Aqui está o código (fornecido pela Apple nos fóruns de desenvolvimento) para solucionar o problema:
Também é importante notar que na versão atual do Xcode (5.0.1 (5A2053)) esta fonte não está listada como uma opção na lista suspensa Fonte no Interface Builder. Portanto, se você configurou anteriormente um rótulo com esta fonte, notará que a interface do usuário fica confusa e o rótulo acaba sendo atribuído a alguma outra fonte e tamanho no tempo de execução (veja o screencap da ui abaixo). Para rótulos configurados em storyboards / xibs, você precisará redefinir a fonte no código.
Para referência, aqui está a discussão do problema nos fóruns de desenvolvimento.
fonte
Este é um bug no iOS 7.0.3.
Se você estiver usando explicitamente HelveticaNeue-Italic, poderá criá-lo usando esta solução alternativa:
Observe, no entanto, que essa solução alternativa funcionará apenas no iOS 7; não pode ser implantado no iOS 6 (porque
CTFontRef
eUIFont
não eram interligados gratuitamente no iOS 6). No entanto, no iOS 6, você pode apenas usar seu código de pesquisa de fonte normal.fonte
É minha convicção que é um bug. Eu arquivei assim com a Apple. Infelizmente para mim, meu aplicativo está falhando. A fonte é usada em uma biblioteca de terceiros que estou usando. Muitas pessoas no Twitter estão relatando problemas.
fonte
Se você estiver acessando dinamicamente a fonte em itálico, em vez de acessar a fonte por nome,
[UIFont fontWithName:@"HelveticaNeue-Italic" size:15.0f]
use[UIFont italicSystemFontOfSize:15.0f]
isso está funcionando bem para mim.fonte
fontWithName:size:
primeiro e, se o resultado fornil
, executeitalicSystemFontOfSize:
, que sempre deve retornar algo e pelo menos evitar um travamento.Atualmente não encontro a sessão, mas eles disseram algo que você não pode mais contar com as fontes disponíveis no iOS7. Eles podem até mudar durante a vida útil do seu aplicativo. O que basicamente significa: Quando você especifica fontes em seu aplicativo, você está confuso, use descritores de fonte ou fontes preferidas em vez disso!
fonte
Encontrei outra solução que parece funcionar. Eu desliguei uma chamada para
[[UIFont italicSystemFontOfSize:12.0] fontName]
para ver qual é a fonte real em itálico do sistema que está sendo usada e retornou ".HelveticaNeueInterface-ItalicM3". Um teste simples mostra que usando
[UIFont fontWithName:@".HelveticaNeueInterface-ItalicM3" size:12.0]
trabalho! Comparando-as visualmente, a fonte retornada pela chamada acima parece ser exatamente a mesma que a fonte 'HelveticaNeue-Italic' original.
Este problema é quase certamente um bug ... Helvetica Neue é a fonte padrão no iOS 7, então as fontes dessa família não devem faltar. Tudo funcionou bem no Xcode v.5.0, mas imediatamente após a atualização para 5.0.1, esse problema começou a aparecer. Eu registrei um bug com a Apple observando tanto. Até então, essa solução parece funcionar ...
fonte
O relatório de bug que preenchi com a Apple foi marcado como "Fechado como duplicado". Tenho esperança de que isso signifique que eles o consideram um bug. No entanto, o iOS 7.0.4 não corrige o bug.
fonte
O bug parece ter sido corrigido no iOS 7.1 beta 1.
[UIFont fontWithName:@"HelveticaNeue-Italic" size:size];
retorna uma fonte.fonte
Eu tive um mesmo travamento que costumava travar apenas no iOS 7.0.3 e 7.0.4, e funciona perfeitamente em todas as outras versões. Depois de tanta investigação, descobri que @ "HelveticaNeue-Italic" não está disponível nas versões iOS 7.0.3 e 7.0.4, de modo que costumava ficar acima do travamento nessas versões.
Corrigi o problema com o código abaixo, isso pode ser útil para alguém necessitado.
O registro de travamento é:
fonte
Como ninguém mencionou nada sobre o suporte a itálico HelveticaNeue no UIWebView, pensei em compartilhar minhas descobertas.
A partir de 7.0.6, o itálico regular ainda está faltando em UIWebView e parece cair para UltraLightItalic na mesma família. Isso parece um pouco estranho quando está ao lado de um texto HelveticaNeue de peso normal sem itálico, pois é muito mais leve.
Minha solução alternativa foi usar Helvetica comum em vez de HelveticaNeue, mas apenas para o itálico. Portanto, se você tiver CSS parecido com este:
... você adicionaria duas outras classes para substituir
<i>
e<em>
:A fonte Helvetica italic normal parece boa e não acho que alguém notaria que não é HelveticaNeue.
fonte