87 votes

Personnalisé installé des polices s'affichent pas correctement dans UILabel

Je suis en train d'utiliser une police Helvetica Neue Condensed polices qui j'ai eu de la Police Adobe Collection Forfait Pro. Malheureusement, il semble se dessiner de manière incorrecte lorsque je l'utilise dans un UILabel.

La hauteur de la ligne semble être calculée correctement (je pense), mais quand la police est affiché, il est aligné sur le haut de la boîte englobante. J'ai appelé [myLabel sizeToFit] et seulement ajusté à la largeur de produire cette capture d'écran:

Screen capture of incorrect font rendering

J'ai eu le même problème à la fois avec le gras et la version régulière de la police. J'ai été en mesure de tirer une version de Helvetica Neue Bold partir de OSX et le mettre sur mon appareil et il affiche bien (fond vert dans l'image ci-dessus).

Ce qui pourrait être mal avec le fichier de police ou de mon code qui serait la cause de dessiner de cette façon?

126voto

kolyuchiy Points 2987

J'ai posté une solution qui consiste à patcher police ttf fichier ici:

Un problème similaire a été discuté lors de la Coutume installé des polices s'affichent pas correctement dans UILabel. Il n'y a pas de solution donnée.

Voici la solution qui a fonctionné pour mon custom de police qui a eu le même problème dans UILabel, UIButton et ces. Le problème avec la police s'est avéré être le fait que son bloqueur de propriété était trop petit par rapport à la valeur de polices système. Bloqueur est un espace vertical au-dessus de polices de caractères. Pour fixer votre police, vous devrez télécharger Apple Police Suite d'outils utilitaires de ligne de commande. Puis, prenez votre police et effectuez les opérations suivantes:

~$ ftxdumperfuser -t hhea -A d Bold.ttf

Cela permettra de créer Bold.hhea.xml. L'ouvrir avec un éditeur de texte et d'augmenter la valeur de ascender d'attribut. Vous aurez à expérimenter un peu pour trouver la valeur exacte qui fonctionne le mieux pour vous. Dans mon cas, je l'ai changé à partir de 750 à 1200. Ensuite, exécutez à nouveau l'utilitaire avec la ligne de commande suivante pour fusionner vos modifications dans le fichier ttf:

~$ ftxdumperfuser -t hhea -A f Bold.ttf

Alors simplement l'utilisation de la police ttf dans votre application.

66voto

Joseph Lin Points 1587

Donc, c'est une version modifiée de kolyuchiy de réponse.

J'ai ouvert ma de la police avec les Glyphes, et ensuite exporté sans modifier quoi que ce soit. En quelque sorte, comme par magie, l'alignement vertical problème a disparu!

Quoi de mieux que la nouvelle police joue gentiment avec des méthodes comme sizeWithFont:, donc il n'a pas les problèmes mentionnés par Josué.

J'ai pris un coup d'oeil à la HHEA table avec la commande kolyuchiy mentionné, et a remarqué que les Glyphes modifié non seulement l' ascender, mais aussi lineGap et numberOfHMetrics pour moi.

Voici les données brutes, avant:

versionMajor="1"
versionMinor="0"
ascender="780"
descender="-220"
lineGap="200"
advanceWidthMax="1371"
minLeftSideBearing="-73"
minRightSideBearing="-52"
xMaxExtent="1343"
caretSlopeRise="1"
caretSlopeRun="0"
caretOffset="0"
metricDataFormat="0"
numberOfHMetrics="751"

et après:

versionMajor="1"
versionMinor="0"
ascender="980"
descender="-220"
lineGap="0"
advanceWidthMax="1371"
minLeftSideBearing="-73"
minRightSideBearing="-52"
xMaxExtent="1343"
caretSlopeRise="1"
caretSlopeRun="0"
caretOffset="0"
metricDataFormat="0"
numberOfHMetrics="748"

Donc la morale de l'histoire - ne pas simplement augmenter la montante, mais de modifier les autres valeurs.

Je ne suis pas la typographie expert donc je ne peux pas vraiment expliquer le pourquoi et le comment. Si quelqu'un peut fournir une meilleure explication, il serait grandement apprécié! :)

32voto

phatmann Points 4153

iOS 6 les honneurs de la police lineGap de la propriété, tandis que iOS 7 l'ignore. Si seulement les polices personnalisées avec une ligne vide de 0 fonctionnera correctement sur les deux systèmes d'exploitation.

La solution est de faire de la lineGap 0 et de faire le bloqueur donc plus gros. Par la réponse ci-dessus, une solution est d'importer et d'exporter à partir de Glyphes. Toutefois, notez qu'une future version de l'application peut corriger ce "bug".

Une solution plus robuste consiste à modifier la police vous-même, par ce post. Plus précisément,

  1. Installer OS X font des Outils.
  2. Dump les mesures de police dans un fichier: ftxdumperfuser -t hhea -A d YOUR_FONT.ttf
  3. Ouvrez le sous-évaluées fichier dans un éditeur.
  4. Modifier l' ascender de la propriété en ajoutant la valeur de l' lineGap de la propriété. Par exemple, si l' lineGap est de 200 et l' ascender 750, faire l' ascender 950.
  5. Définir l' lineGap à 0.
  6. Fusionner les modifications dans la police: ftxdumperfuser -t hhea -A f YOUR_FONT.ttf

Une fois que vous faites cela, vous pourriez avoir à ajuster votre INTERFACE utilisateur en conséquence.

5voto

nurne Points 978
  1. Télécharger et Installer la Pomme de Police d'Outils ici: https://developer.apple.com/downloads/index.action?q=font (le lien de téléchargement est en bas)
  2. Ouvrez le terminal et cd votre chemin à l'endroit où votre police est
  3. Exécutez cette commande: ftxdumperfuser -t hhea -d MY_FONT_NAME.ttf
  4. Maintenant vous avez un fichier xml avec certains des les propriétés de la police, de l'éditer dans votre éditeur de texte
  5. La recherche du "lineGap" de la propriété et de l'ajouter à sa valeur de 200
  6. Enregistrer le fichier xml
  7. Exécutez cette commande: ftxdumperfuser -t hhea -f MY_FONT_NAME.ttf
  8. Supprimer le fichier xml
  9. Essayez la configuration de la police sur iOS 6 et de voir si c'est mieux.
  10. Si vous avez besoin, vous pouvez revenir à l'étape 3 et ajouter/soustraire à la "lineGap de la propriété". (J'ai fini par l'ajout de 250 à ma configuration)

1voto

RyanR Points 5691

Avez-vous essayé de Base de Texte? J'ai eu quelques succès de rendu des polices personnalisées par Cœur le Texte, mais je ne sais pas si il pourrait convenir à votre situation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X