web-dev-qa-db-fra.com

Alignement vertical des polices personnalisées UIButton

J'ai un UIButton qui utilise une police personnalisée, qui est définie lorsque ma vue se charge:

- (void)viewDidLoad
{
    [super viewDidLoad];    
    self.searchButton.titleLabel.font = [UIFont fontWithName: @"FONTNAME" size: 15.0 ];
}

Le problème que j'ai, c'est que la police semble flotter vers le haut de la ligne centrale. Si je commente cette ligne, la police par défaut apparaît bien centrée verticalement. Mais le passage à la police personnalisée rompt l'alignement vertical.

Je reçois également le même problème sur une cellule de tableau avec une police personnalisée.

Dois-je dire à la vue quelque part que la police personnalisée n'est pas aussi grande que les autres polices?

EDIT: Je viens de réaliser que la police que j'utilise est une police Windows TrueType. Je peux bien l'utiliser dans TextEdit sur Mac, seulement un problème d'alignement dans mon application

Button text not vertically centered

113
Pete

Un problème similaire a été discuté à La police installée personnalisée ne s'affiche pas correctement dans UILabel . Aucune solution n'a été donnée.

Voici la solution qui a fonctionné pour ma police personnalisée qui avait le même problème dans UILabel, UIButton et autres. Le problème avec la police s'est avéré être le fait que sa propriété ascender était trop petite par rapport à la valeur des polices système. Ascender est un espace vertical au-dessus des caractères de la police. Pour corriger votre police, vous devrez télécharger Apple Font Tool Suite utilitaires de ligne de commande. Prenez ensuite votre police et procédez comme suit:

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

Cela va créer Bold.hhea.xml. Ouvrez-le avec un éditeur de texte et augmentez la valeur de l'attribut ascender. Vous devrez expérimenter un peu pour trouver la valeur exacte qui vous convient le mieux. Dans mon cas, je l'ai changé 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

Ensuite, utilisez simplement la police ttf résultante dans votre application.

OS X El Capitan

Le programme d'installation Apple Font Tool Suite ne fonctionne plus sous OSX El Capitan à cause de SIP car il essaie d'installer le fichiers binaires dans un répertoire protégé. Vous devez extraire manuellement ftxdumperfuser. Copiez d'abord le paquet du dmg dans un répertoire local, puis décompressez le OS X Font Tools.pkg avec

~$ xar -xf OS\ X\ Font\ Tools.pkg

Naviguez maintenant dans le dossier fontTools.pkg avec

~$ cd fontTools.pkg/

Extraire la charge utile avec

~$ cat Payload | gunzip -dc | cpio -i

Le binaire ftxdumperfuser est maintenant dans votre dossier actuel. Vous pouvez le déplacer vers /usr/local/bin/ afin que vous puissiez l'utiliser dans chaque dossier à l'intérieur de l'application de terminal avec ce qui suit.

~$ mv ftxdumperfuser /usr/local/bin/
302
kolyuchiy

J'ai résolu le problème en ajustant l'encart du contenu supérieur (pas le titre!).

Par exemple: button.contentEdgeInsets = UIEdgeInsetsMake (10.0, 0.0, 0.0, 0.0);

Bonne chance!

48
Jordi Corominas

Je pense c'est la meilleure réponse. pas de jeu avec ascender, numberOfHMetrics etc ... juste import-export par Glyphs application et Job done. Merci à cette réponse: https://stackoverflow.com/a/16798036/1207684

6
dollar2048

Je ne sais pas si cela vous aidera car cela peut dépendre de votre police, mais il se peut que votre ligne de base soit mal alignée.

self.searchButton.titleLabel.baselineAdjustment = 
    UIBaselineAdjustmentAlignCenters;
5
Mats

Vous pouvez essayer cela dans Interface Builder. Voici un aperçu de la façon de le faire -

enter image description hereenter image description here

Comme vous pouvez le voir, essayer de le faire dans IB a ses propres avantages.

2
Srikar Appalaraju

REMARQUE: il y a clairement une meilleure réponse que celle-ci (celle avec des centaines de votes positifs ci-dessus)

Je ne trouve pas de vraie réponse à cela, à part modifier le fichier de police. Ce que je ne sais pas faire et je n'ai pas eu le temps, alors j'ai juste rendu mes photos plus étroites et ajusté la cellule pour lui donner l'air d'être correctement alignée.

Un petit hack sale je suppose, mais ça marche et ça va.

C'était la seule police qui a causé un problème, donc le problème doit être avec le fichier de police.

Ce n'est pas vraiment moi qui ai conclu cela, c'était un autre SO post, mais je ne le trouve nulle part, si je le retrouve, je le collerai dans les commentaires.

0
Pete