我有一个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 .. 有线索吗?谢谢!
答案 0 :(得分:8)
我有一些你可以在我的github上使用的代码,检查它,它是UILabel的一个类别,你需要设置框架宽度,当你可以在UILabel上调整resizeToFit时,它调整高度以适应内容,并且返回标签末尾的y位置,以便您可以调整显示在其后面的任何内容。
答案 1 :(得分:5)
我建议将此归档为错误。
-sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode:
返回的尺寸宽度正确,但高度并不考虑实际字体大小。
UILabel
似乎也有这个错误。更改标签的大小以匹配-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;
答案 2 :(得分:2)
尝试使用较小的fontSize创建 font 。例如:
UIFont *font = [UIFont fontWithName:@"Marker Felt" size:20];
但 actualFontSize 将链接传递给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;
答案 3 :(得分:0)
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上使用标签来获取大文本,您也可以这样做
答案 4 :(得分:0)
您是否尝试过intrinsicContentSize?
myLable.numberOfLines = 0
myLable.frame = CGRect(x: 10, y: 10, width: 300, height: lblSuperscript.intrinsicContentSize().height)