2012-04-17 17 views
5

私はUIButtonのタイトルにカスタムフォントを使用しています。この特定のフォントを除いて、最初の文字の一部がクリップされます。たとえば:クロップされたUIButtonタイトル

enter image description here

私はcontentEdgeInsetsとtitleEdgeInsetsを設定しようと、それはクリップされていないように見えることはできません。 button.titleLabel.clipsToBoundsプロパティをNOに設定しようとしました。

ご意見をいただければ幸いです。

答えて

8

私はUIButtonタイトルをnilに設定してしまい、自分のUILabelをサブビューとしてUIButtonに追加しました。 UILabelフレームをボタンと同じサイズに設定し、中央に配置するように設定しました。

私が確信している最もエレガントな解決策ではありませんが、それは仕事を完了します。

+2

これが唯一の解決策であることは本当にうんざりです。これが起こる理由は、フォントデザイナーが意図的に文字の境界を実際よりも小さくエンコードしてネストするためです。これはイタリック体や筆記体フォントにとって特に重要です。私はAppleがUIButtonラベルの幅を計算することで "正確"ではなかったと思うし、少なくとも私たち自身でそれを変更できるようにしたいと思う。私はバグレポートを提出しています。 – Bek

1

あなたのコンテンツが楽しく整理されているように見えます。ラベルのフレームに直接アクセスできない場合は、[button setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];を使用して、水平方向の配置の問題を解決してください。

+0

あるとして実際にそれが中央に設定されています。私はそれを正しい正当化に設定すると、それは切り取られたままになります。 –

9

ジェシュアのソリューションはうまく動作しますが、私の目には最適ではありません。 私はUIButtonをサブクラス化し、それを上書きすることをお勧めしますlayoutSubviewsメソッド。

-(void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    CGRect frame = self.titleLabel.frame; 
    frame.size.height = self.bounds.size.height; 
    frame.origin.y = self.titleEdgeInsets.top; 
    self.titleLabel.frame = frame; 
} 
+0

これは本当に簡単です。(UIButtonをサブクラス化する)クラスを作成し、貼り付けをコピーし、ボタンのカスタムクラスに割り当てます。ありがとう! –

+0

これは受け入れられる回答である必要があります。シンプルでエレガント。 –

+0

ありがとうございました –

0

上記回答のスウィフトコード:

override func layoutSubviews() { 
    super.layoutSubviews() 
    titleLabel?.frame = CGRect(x: bounds.origin.x, y: titleEdgeInsets.top, width: frame.width, height: bounds.size.height) 
} 
関連する問題