1. ホーム
  2. ios

[解決済み】UILabelのフォントサイズを動的に変更する。

2022-04-14 18:08:20

質問

現在、私は UILabel :

factLabel = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 280, 100)];
factLabel.text = @"some text some text some text some text";
factLabel.backgroundColor = [UIColor clearColor];
factLabel.lineBreakMode = UILineBreakModeWordWrap;
factLabel.numberOfLines = 10;
[self.view addSubview:factLabel];

私のiOSアプリケーションの生涯を通じて factLabel は、さまざまな値を取得します。複数の文章を持つものもあれば、5、6個の単語だけのものもあります。

どのように設定すれば UILabel テキストが常に定義した境界線に収まるように、フォントサイズを変更できるようにするには?

解決方法は?

単線です。

factLabel.numberOfLines = 1;
factLabel.minimumFontSize = 8;
factLabel.adjustsFontSizeToFitWidth = YES;

上記のコードで、テキストのフォントサイズを(例えば)以下のように調整します。 8 ラベルの中にテキストを収めようとしています。 numberOfLines = 1 は必須です。

複数行になります。

について numberOfLines > 1 を通して、最終的なテキストのサイズを把握する方法があります。 NSStringのsizeWithFont:... UIKitの追加 メソッドなどがあります。

CGSize lLabelSize = [yourText sizeWithFont:factLabel.font
                                  forWidth:factLabel.frame.size.width
                             lineBreakMode:factLabel.lineBreakMode];

後は、結果的にラベルのサイズを変更するだけです。 lLabelSize 例えば、ラベルの高さだけを変更すると仮定して)。

factLabel.frame = CGRectMake(factLabel.frame.origin.x, factLabel.frame.origin.y, factLabel.frame.size.width, lLabelSize.height);

iOS6

単線です。

iOS6からスタート。 minimumFontSize は非推奨となりました。行は

factLabel.minimumFontSize = 8.;

に変更することができます。

factLabel.minimumScaleFactor = 8./factLabel.font.pointSize;

iOS7

複数行になります。

iOS7からスタート。 sizeWithFont は非推奨となります。 マルチライン・ケースは、以下のようになります。

factLabel.numberOfLines = 0;
factLabel.lineBreakMode = NSLineBreakByWordWrapping;
CGSize maximumLabelSize = CGSizeMake(factLabel.frame.size.width, CGFLOAT_MAX);
CGSize expectSize = [factLabel sizeThatFits:maximumLabelSize];
factLabel.frame = CGRectMake(factLabel.frame.origin.x, factLabel.frame.origin.y, expectSize.width, expectSize.height);

iOS 13 (Swift 5)です。

label.adjustsFontSizeToFitWidth = true
label.minimumScaleFactor = 0.5