UILabelのminimumScaleFactorはどのように機能しますか?


109

私はminimumFontSize以前に使用しましたが、その機能は現在廃止されており、どのようにminimumScaleFactor機能するのかよくわかりません。

最大フォントサイズを10、最小フォントサイズを7に設定します。

スケール係数を使用してフォントサイズ7にサイズを変更するにはどうすればよいですか?

UILabel 作成:

UILabel *label = [[UILabel alloc] init];
[label setTranslatesAutoresizingMaskIntoConstraints:NO];
label.text =  [labelName uppercaseString];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor whiteColor];
label.font = [UIFont fontWithName:HELVETICA_FONT_STYLE_BOLD size:9.5];
label.backgroundColor = [UIColor clearColor];
label.minimumScaleFactor = .1f;

[label addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[label(WIDTH)]"
                                                              options:0
                                                              metrics:@{@"WIDTH" : [NSNumber numberWithFloat:buttonSize.width]}
                                                                views:NSDictionaryOfVariableBindings(label)]];

[contentView addSubview:label];

回答:


204

設定する必要があります label.adjustsFontSizeToFitWidth = YES;


1
パーフェクト、これは私が自分のコードで欠けていたものです。ありがとう:D
フォグマイスター

14
注:「アップルのドキュメントでは、minimumScaleFactorは、numberOfLinesが1に設定されている場合にのみ機能すると述べています。0または1より大きい値を使用しても機能しません。」。SeanKに感謝します。
samthui7 2015年

驚くばかり!おもしろいことに、XIBでminumumScaleFactorを設定する場合、adjustsFontSizeToFitWidthを設定する必要はありませんが、コードで行う場合は必要です。
Politta 2017年

104

他の回答が言うことに加えて、minSize / defaultSize(div)をとして配置したminimumScaleFactor場合、それは古いを使用する場合と同じになりますminimumFontSize

たとえば、デフォルトのラベルサイズを使用して最小フォントサイズを10にするには、次のようにします。

[label setMinimumScaleFactor:10.0/[UIFont labelFontSize]];

[UIFont labelFontSize]デフォルトでない場合は、ラベルのフォントサイズに置き換えます)。

これは次と同じになります: [label setMinimumFontSize:10.0];


分割はCGFloatとしてキャストする必要があります。それ以外の場合は機能しません
dwery

@dwery 10 / labelSizeを実行すると、切り捨てられた整数値0になる可能性がありますが、明示的にキャストしなくても10.0または10.fは正常に機能します。
Kalle

あなたは正しい、それはうまくいくはずです。どのコードで機能しなかったか思い出せません。おそらくfまたはドットが欠落していたのでしょう。
15年

20

ドキュメントによると:

このプロパティを使用して、現在のフォントサイズの最小の乗数を指定します。これにより、ラベルのテキストを表示するときに使用できる許容可能なフォントサイズが得られます。このプロパティに値0を指定すると、現在のフォントサイズが最小のフォントサイズとして使用されます。

したがって、ラベルのデフォルトのフォントサイズがの場合10、を0.7fとして配置するminimumScaleFactorと、同じように動作するはずですminimumFontSize


それも私が考えたことです。しかし、0.1fに設定しても、テキストのサイズは調整されません。uilabelコードを追加します。
Padin215 2013

制約を削除して、ラベルのフレームを単に縮小するとどうなりますか?
kovpas 2013

9
Log139:numberOfLinesは何に設定されていますか?Appleのドキュメントによると、minimumScaleFactorは、numberOfLinesが1に設定されている場合にのみ機能します。0または1より大きい値を使用しても機能しません。
SeanK 2013

1
それはnumberOfLinesは0以上1に設定されていますがされていない場合でも動作します@SeanK
Asadullahアリ

12

他の回答に加えて、私を助ける初心者にやさしい説明を追加します。

計算方法はminimumScaleFactor?ラベルの最小フォントサイズをラベルのデフォルトのフォントサイズで割ります。たとえば、デフォルトのフォントサイズは25です。最小フォントサイズは10です。

10/25 = 0.4

0.4はあなたのminimumScaleFactor値です。上記の@Jsdodgersの回答も参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.