web-dev-qa-db-ja.com

UIButtonに収まるようにテキストのフォントサイズを調整する

UIButtonのサイズが固定されている間、ボタンテキストがUIButtonに収まるようにします。

もちろん、UIButtonのtitleLabelにアクセスできます。ラベルでは、autoshrinkを最小フォントスケールに設定します。これは、

self.myButton.titleLabel.adjustsFontSizeToFitWidth = YES;

、ただし実際には同じ動作をしません。テキストが垂直方向ではなく水平方向にのみ境界に収まり、フォントサイズが変更されないためです。

ラベルのフォントサイズをプログラムで実際に調整して、テキストをラベルの境界に合わせるにはどうすればよいですか(下図のGoalを参照)?

adjustsFontSizeToFitWidth does not actually adjust the font size to fit the frame, only the width

私はすでに試しました

self.myButton.titleLabel.numberOfLines = 0;
self.myButton.titleLabel.minimumScaleFactor = 0.5f;

成功せず、常に上の写真の左側のadjustsFontSizeToFitWidthのようになりました。

編集ソリューションもios7準拠でなければなりません

32
MarkHim
self.mybutton.titleLabel.minimumScaleFactor = 0.5f;
self.mybutton.titleLabel.numberOfLines = 0;   <-- Or to desired number of lines
self.mybutton.titleLabel.adjustsFontSizeToFitWidth = YES;

... viewDidLoadのlayoutIfNeededの後、トリックを行いました。結局のところ、これらはすべて、フォントサイズをフレームに合わせるだけでなく、実際にフォントサイズを調整するように設定する必要があります。

Swift 3:の更新

mybutton.titleLabel?.minimumScaleFactor = 0.5
mybutton.titleLabel?.numberOfLines = 0   <-- Or to desired number of lines
mybutton.titleLabel?.adjustsFontSizeToFitWidth = true
78
MarkHim

Swift 3.0のコードを更新:

yourButton.titleLabel?.minimumScaleFactor = 0.5
yourButton.titleLabel?.numberOfLines = 0
yourButton.titleLabel?.adjustsFontSizeToFitWidth = true
8
CodeBender

Interface Builderで、ボタンのユーザー定義ランタイム属性を設定することもできます。

titleLabel.adjustsFontSizeToFitWidth = true
7
StackUnderflow

次のメソッドを呼び出してみてください。

button.titleLabel?.baselineAdjustment = UIBaselineAdjustment.AlignCenters
3
Jason Nam

これを試して:

  [myButton setFont:[[myButton font] fontWithSize:--originalButtonFontSize]];
  textWidth = [text sizeWithFont:[myButton font]].width;

}
1
Wostein

Xcode->ストーリーボードを開く->属性インスペクターに移動->コントロール->配置->水平と垂直の両方で2番目を選択します。

または

YourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;
0
VJVJ