根据UILabel帧大小动态确定字体大小

时间:2013-06-10 00:52:31

标签: ios uilabel

我正在努力解决一个我已经四处寻找但却无法弄清楚的问题。我在UILabel控件中有一个UIScrollView控件。我已将标签的高度设置为包含它的scrollview的高度,现在我需要确定将填充标签的文本的正确高度(动态)。因此,只要scrollView高度,标签内的文本高度将匹配,宽度将扩展以防止文本截断(如下图所示)。

我已尝试sizeToFitconstrainedSize之类的内容,但我无法正常使用,如何实现这样的目标?

enter image description here

3 个答案:

答案 0 :(得分:5)

尝试这个简单的代码,它可以帮助你

 UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 100)];
    label.backgroundColor=[UIColor clearColor];
    label.text= yourString;
    label.numberOfLines=0;
    label.adjustsFontSizeToFitWidth=YES;
    label.minimumFontSize=6;
    label.textAlignment=UITextAlignmentCenter;
    [self.View addSubview:label];

    CGFloat fontSize = 20;
    while (fontSize > 0.0)
    {
        CGSize size = [yourString sizeWithFont:[UIFont fontWithName:@"Rockwell-Bold" size:fontSize] constrainedToSize:CGSizeMake(label.frame.size.width, 10000) lineBreakMode:UILineBreakModeWordWrap];

        if (size.height <= label.frame.size.height) break;

        fontSize -= 1.0;
    }

    //set font size
    label.font = [UIFont fontWithName:@"Rockwell-Bold" size:fontSize];
    [label release];

答案 1 :(得分:1)

adjustsFontSizeToFitWidth

在Interface Builder中,它是&#34;调整适合&#34;复选框。

答案 2 :(得分:0)

我注意到你想让文字填满整个宽度和全高。谈论文本可能很难做到这一点。无法直接设置文本的精确边界矩形。您只能将字体设置为磅值;它会以或多或少的固定宽高比缩放文本。

您应该能够通过标签的转换属性实现您想要的效果。首先,构建一个固定大小的标签并选择一种字体,以便文本填充框架。 (如果您的文字会有所不同,则会更复杂一点。使用[text sizeWithFont:font]来获得正确的尺寸,并从中设置标签框。)

假设您的标签尺寸与滚动视图尺寸不符。例如。标签是100x10,滚动视图是200x15。如果将标签的框架设置为200x15,则无法获得所需的效果。标签会变大,但里面的文字会保持不变。但是,如果你这样做

label.transform = CGAffineTransformMakeScale(2.0, 1.5);

然后你的整个标签及其内容将被拉长。您可能还需要调整标签的center属性,使其在父视图中正确定位。您需要让代码进行一些计算以确保每次都正确。