Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 根据内容调整UILabel的大小_Ios_Iphone_Uilabel_Uifont - Fatal编程技术网

Ios 根据内容调整UILabel的大小

Ios 根据内容调整UILabel的大小,ios,iphone,uilabel,uifont,Ios,Iphone,Uilabel,Uifont,我有一个UILabel,他的文本大小有属性 title.adjustsFontSizeToFitWidth = YES; 这使我无法使用标准方法调整UILabel的大小。我在这里的另一篇帖子上读到我应该使用这个函数 sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode 从这个答案中: 现在,我不知道该怎么做。。这是实际代码 UIFont *font = [UIFont fontWithName:@"Marker Felt

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

title.adjustsFontSizeToFitWidth = YES;
这使我无法使用标准方法调整UILabel的大小。我在这里的另一篇帖子上读到我应该使用这个函数

sizeWithFont:minFontSize:actualFontSize:forWidth:lineBreakMode
从这个答案中:

现在,我不知道该怎么做。。这是实际代码

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。。 有什么线索吗?谢谢

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上的标签来显示大文本,你也可以这样做

我有一些代码可以在我的github上使用,请查看,这是UILabel的一个类别,你需要设置框架宽度,当你可以在UILabel上重新调整它的大小时,它会调整高度以适应内容,并返回标签末端的y位置,以便可以调整标签后面显示的任何内容


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

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;

我建议将此作为bug归档

-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;

你试过intrinsicContentSize吗

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

title.minimumFontSize是什么?width变量中的值是什么?目前没有设置minimumFontSize,而width只是我想要文本的UIView的宽度(假设它是200.0),尝试将其设置为10,例如=)如果您有固定的宽度,那么您希望从大小中得到什么?身高?是的,我想知道身高。。基本上,重点是模拟uilabel不支持的垂直顶部文本对齐。您是否尝试将title.minimumFontSize设置为低于200的值?请您详细说明如何使用adjustsFontSizeToFitWidth进行此操作?谢谢我试着用它,但我不确定。。问题是我设置了框架宽度,我调用resizeToFit并调整了它的大小,但字体大小仍然是200(因此文本被包装在多行上)。。。我的观点是只获取一行填充视图的文本(字体大小根据字符串的长度而变化)。。您的代码可以这样做吗?不,我的代码是针对多行标签的,将框架的高度设置为0。例如,您可以提供文本和代码句柄来调整高度。也许这不是你想要的。抱歉…在我的工具文件中添加了最后一条评论,这样文本保持20分!调整ntSizeToFitWidth仅通过缩小尺寸来工作。也不读取实际字体大小,只需设置即可!更新了我的答案。请试一试。将20替换为最小字体大小这在特定情况下是可行的。。。当框架创建的字体大小为20就足够了!我会发布我找到的解决方案,无论如何谢谢你的帮助!编辑:不会发布,与lemnar发布的内容非常相似:p
sizeWithFont
不推荐使用