web-dev-qa-db-ja.com

UIButtonカスタムフォントの垂直方向の配置

ビューが読み込まれるときに設定されるカスタムフォントを使用するUIButtonがあります。

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

私が持っている問題は、フォントが中心線から浮いているように見えることです。この行をコメントアウトすると、デフォルトのフォントが垂直方向の中央に表示されます。ただし、カスタムフォントに変更すると、垂直方向の配置が崩れます。

カスタムフォントを使用したテーブルセルでも同じ問題が発生します。

カスタムフォントの高さが他のフォントほど高くないことをビューに伝える必要がありますか?

編集:使用しているフォントがWindows TrueTypeフォントであることを認識しました。 MacのTextEditで問題なく使用できますが、アプリの配置の問題のみです

Button text not vertically centered

113
Pete

同様の問題が ILabelに正しく表示されないカスタムインストールフォント で議論されました。解決策はありませんでした。

UILabel、UIButtonなどで同じ問題が発生したカスタムフォントで機能するソリューションを次に示します。フォントの問題は、そのアセンダープロパティがシステムフォントの値と比較して小さすぎるという事実であることが判明しました。アセンダーは、フォントの文字の上にある垂直方向の空白です。フォントを修正するには、 Apple Font Tool Suite コマンドラインユーティリティをダウンロードする必要があります。次に、フォントを取得して次の操作を行います。

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

これにより、Bold.hhea.xmlが作成されます。テキストエディタで開き、ascender属性の値を増やします。最適な値を見つけるには、少し実験する必要があります。私の場合、750から1200に変更しました。次に、次のコマンドラインでユーティリティを再度実行して、変更をttfファイルにマージします。

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

次に、作成したttfフォントをアプリで使用します。

OS X El Capitan

Apple Font Tool Suite Installerは、OSX El Capitanで [〜#〜] sip [〜#〜] が原因で動作しなくなりました。バイナリファイルを保護されたディレクトリに.ftxdumperfuserを手動で抽出する必要があります。最初にdmgからローカルディレクトリにpkgをコピーし、その後OS X Font Tools.pkgを解凍します

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

ここで、fontTools.pkgフォルダーに移動します

~$ cd fontTools.pkg/

ペイロードを抽出

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

ftxdumperfuserバイナリは現在のフォルダーにあります。これを/usr/local/bin/に移動すると、ターミナルアプリケーション内のすべてのフォルダーで次のように使用できます。

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

トップコンテンツ(タイトルではなく)のインセットを調整する問題を解決しました。

例:button.contentEdgeInsets = UIEdgeInsetsMake(10.0、0.0、0.0、0.0);

幸運を!

48
Jordi Corominas

これがベストアンサーです アセンダー、numberOfHMetricsなどで遊んでいない... Glyphs application and Job doneでインポート/エクスポートするだけです。この回答のおかげで: https://stackoverflow.com/a/16798036/1207684

6
dollar2048

フォントに依存する可能性があるため、これが役立つかどうかはわかりませんが、ベースラインがずれている可能性があります。

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

Interface Builderでこれを試すことができます。これを行う方法のスナップショットを次に示します-

enter image description hereenter image description here

IBでこれを実行しようとすると、独自の利点があります。

2

注:明らかにこれよりも優れた答えがあります(上記の数百の賛成票を持つもの)

フォントファイルを編集する以外に、これに対する本当の答えを見つけることができません。方法がわからず、時間もなかったので、写真を狭くし、セルを調整して、適切に配置されているように見せました。

私はおそらく汚い小さなハックが、それは動作し、それは大丈夫です。

これが問題を引き起こした唯一のフォントであったため、問題はフォントファイルにあるに違いありません。

これを結論付けたのは実際には私ではなく、別のSO投稿でしたが、どこにも見つかりません。もう一度見つけたらコメントに貼り付けます。

0
Pete