ios 根据内容调整UILabel大小

l7wslrjt  于 2023-07-01  发布在  iOS
关注(0)|答案(6)|浏览(117)

我有一个UILabel,它的文本大小有属性

title.adjustsFontSizeToFitWidth = YES;

这使我无法使用标准方法来调整UILabel的大小。我在这里的另一篇文章上读到我应该使用这个函数

sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode

从这个答案:How to figure out the font size of a UILabel when -adjustsFontSizeToFitWidth is set to YES?
现在,我不知道如何使它工作..这是实际的代码

UIFont *font = [UIFont fontWithName:@"Marker Felt" size:200];
UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, width, 20.0)];
title.text = @"this is a long title that should be resized";
title.font = font;
title.numberOfLines = 1;
title.adjustsFontSizeToFitWidth = YES;

CGFloat pointSize = 0.0;
CGSize size = [title.text sizeWithFont:font 
                           minFontSize:title.minimumFontSize 
                        actualFontSize:&pointSize 
                              forWidth:width 
                         lineBreakMode:title.lineBreakMode];
title.frame = CGRectMake(title.frame.origin.x, 
                         title.frame.origin.y, 
                         size.width, 
                         size.height);

UILabel的大小调整错误,好像字体大小仍然是200..有线索吗?谢谢!

whitzsjs

whitzsjs1#

我有一些代码你可以在我的github上使用,检查一下,这是UILabel的一个类别,你需要设置框架宽度,当你可以在UILabel上调整大小时,它会调整高度以适应内容,并返回标签末尾的y位置,这样你就可以调整出现在它后面的任何内容。
https://gist.github.com/1005520

5cg8jx4n

5cg8jx4n2#

我建议把这个作为bug归档。
-sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:返回的大小具有正确的宽度,但高度不正确,不能说明实际的字体大小。
UILabel似乎也有这个bug。更改标签的大小以匹配-sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:返回的大小的字体中的文本的高度将错误地垂直定位标签中的文本。
解决方法是计算正确的高度,并将标签上的字体更改为实际字体大小:

CGFloat pointSize = 0.0f;
CGRect frame = title.frame;
frame.size = [title.text sizeWithFont:font
                          minFontSize:title.minimumFontSize
                       actualFontSize:&pointSize
                             forWidth:width
                        lineBreakMode:title.lineBreakMode];
UIFont *actualFont = [UIFont fontWithName:@"Marker Felt" size:pointSize];
CGSize sizeWithCorrectHeight = [title.text sizeWithFont:actualFont];
frame.size.height = sizeWithCorrectHeight.height;
title.frame = frame;
title.font = actualFont;
fgw7neuy

fgw7neuy3#

请尝试使用较小的fontSize创建字体。例如:

UIFont *font = [UIFont fontWithName:@"Marker Felt" size:20];

但要actualFontSize将link传递给CGFloat == 200。
更新日期:
试试这个:

UIFont *font = [UIFont fontWithName:@"Marker Felt" size:20];
UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(0.0, 0.0, width, 20.0)];
title.text = @"this is a long title that should be resized";
title.font = font;
title.numberOfLines = 1;
title.adjustsFontSizeToFitWidth = YES;

CGFloat pointSize = 0.0;
CGSize size = [title.text sizeWithFont:font minFontSize:title.minimumFontSize actualFontSize:&pointSize forWidth:width lineBreakMode:title.lineBreakMode];
title.frame = CGRectMake(title.frame.origin.x, title.frame.origin.y, size.width, size.height);
font = [UIFont fontWithName:@"Marker Felt" size:200];
title.font = font;
ryhaxcpt

ryhaxcpt4#

UILabel * label = [[UILabel alloc] init];
        [label setNumberOfLines:0];
        label.text=[detailDict valueForKey:@"method"];
        [label setFont:[UIFont fontWithName:@"Georgia" size:16.0]];
        CGSize labelsize=[label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(250, 1000.0) lineBreakMode:UILineBreakModeWordWrap];
        int y=0;
        label.frame=CGRectMake(38, y, 245, labelsize.height);
        [label setBackgroundColor:[UIColor clearColor]];
        [label setTextColor:[UIColor whiteColor]];
        scrollView.showsVerticalScrollIndicator = NO;
        y+=labelsize.height;
        [scrollView setContentSize:CGSizeMake(200,y+50)];
        [scrollView addSubview:label];
        [label release];

我认为你应该使用这段代码,我正在使用的标签上scrollview为一个大文本你也可以这样做

csbfibhn

csbfibhn5#

你试过intrinsicContentSize吗?

myLable.numberOfLines = 0
    myLable.frame = CGRect(x: 10, y: 10, width: 300, height: lblSuperscript.intrinsicContentSize().height)
lawou6xi

lawou6xi6#

这个密码对我有用

questionLabel.numberOfLines = 0
    questionLabel.sizeToFit()
    questionLabel.layoutIfNeeded()

相关问题