我目前有一个UILabel:
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 个单词。
factLabel
如何设置UILabel字体大小以使文本始终符合我定义的范围?
单线:
factLabel.numberOfLines = 1; factLabel.minimumFontSize = 8; factLabel.adjustsFontSizeToFitWidth = YES;
上面的代码会将您的文本的字体大小调整为(例如)8尝试使您的文本适合标签内。 numberOfLines = 1是强制性的。
8
numberOfLines = 1
多行:
对于有一种方法可以通过NSString 的 sizeWithFont:… UIKit 添加`numberOfLines
1`方法来计算最终文本的大小,例如:
CGSize lLabelSize = [yourText sizeWithFont:factLabel.font forWidth:factLabel.frame.size.width lineBreakMode:factLabel.lineBreakMode];
之后,您可以使用 results 调整标签大小lLabelSize,例如(假设您将仅更改标签的高度):
lLabelSize
factLabel.frame = CGRectMake(factLabel.frame.origin.x, factLabel.frame.origin.y, factLabel.frame.size.width, lLabelSize.height);
iOS6
从 iOS6 开始,minimumFontSize已弃用。线
minimumFontSize
factLabel.minimumFontSize = 8.;
可以改为:
factLabel.minimumScaleFactor = 8./factLabel.font.pointSize;
IOS 7
从 iOS7 开始,sizeWithFont已弃用。多行大小写简化为:
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