gpt4 book ai didi

objective-c - 适合 UILabel 中的文本

转载 作者:IT老高 更新时间:2023-10-28 11:46:16 26 4
gpt4 key购买 nike

这是我的代码

 UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 50, 300, 50)];
label.textAlignment = UITextAlignmentCenter;
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor whiteColor];
label.textColor.font = [UIFont fontWithName:@"Verdana" size:30];
label.text = @"A very long string";
etc...

问题是字体很大,无法放入标签。它只是显示“非常”

怎么做才能显示整个文本。我试过了

label.lineBreakMode = UILineBreakModeWordWrap;
label.numberOfLines = 0;

但这对我不起作用。我想以编程方式做到这一点。

//编辑

CGRect frame = CGRectMake(10, 50, 300, 50);
NSString *labelString = @"Players.";

UILabel *howManyUsersLabel = [[UILabel alloc]initWithFrame:frame];
howManyUsersLabel.textAlignment = UITextAlignmentCenter;
howManyUsersLabel.backgroundColor = [UIColor clearColor];
howManyUsersLabel.textColor = [UIColor whiteColor];
howManyUsersLabel.adjustsFontSizeToFitWidth = NO;
howManyUsersLabel.numberOfLines = 0;

CGFloat fontSize = 30;
while (fontSize > 0.0)
{
CGSize size = [labelString sizeWithFont:[UIFont fontWithName:@"Verdana" size:fontSize] constrainedToSize:CGSizeMake(frame.size.width, 10000) lineBreakMode:UILineBreakModeWordWrap];

if (size.height <= frame.size.height) break;
fontSize -= 1.0;
NSLog(@"test");
}

howManyUsersLabel.font = [UIFont fontWithName:@"Verdana" size:fontSize];

最佳答案

我想你只需要添加这个:

label.adjustsFontSizeToFitWidth = YES;
label.minimumFontSize = 0;

然后文本将自动调整大小以适合标签。

但是请注意,这只有在 label.numberOfLines = 1 时才会真正起作用,这样文本就在一行上。

如果您需要将文本换成多行但仍要缩小以适应,则解决方案会更复杂。为此,需要计算文本的渲染大小,然后循环缩小,如下:

NSString *theText = @"A long string";
CGRect labelRect = CGRectMake(10, 50, 300, 50);
label.adjustsFontSizeToFitWidth = NO;
label.numberOfLines = 0;

CGFloat fontSize = 30;
while (fontSize > 0.0)
{
CGSize size = [theText sizeWithFont:[UIFont fontWithName:@"Verdana" size:fontSize] constrainedToSize:CGSizeMake(labelRect.size.width, 10000) lineBreakMode:UILineBreakModeWordWrap];

if (size.height <= labelRect.size.height) break;

fontSize -= 1.0;
}

//set font size
label.font = [UIFont fontWithName:@"Verdana" size:fontSize];

这基本上只是减小字体大小,直到它适合标签。

更新:

从 iOS7 开始,多行文本也会在 adjustsFontSizeToFitWidth = YES 时自动缩小,因此不再需要此答案的第二部分(除非您仍然支持 iOS 6 及更早版本)。

关于objective-c - 适合 UILabel 中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9101607/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com