小编典典

动态改变UILabel的字体大小

all

我目前有一个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字体大小以使文本始终符合我定义的范围?


阅读 154

收藏
2022-07-01

共1个答案

小编典典

单线:

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

上面的代码会将您的文本的字体大小调整为(例如)8尝试使您的文本适合标签内。 numberOfLines = 1是强制性的。

多行:

对于有一种方法可以通过NSString 的 sizeWithFont:… UIKit
添加
`numberOfLines

1`方法来计算最终文本的大小,例如:

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

之后,您可以使用 results 调整标签大小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;

IOS 7

多行:

从 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(斯威夫特 5):

label.adjustsFontSizeToFitWidth = true
label.minimumScaleFactor = 0.5
2022-07-01