根据字符串长度更改UILabel中的字体大小

时间:2012-03-07 18:49:35

标签: objective-c cocoa-touch uilabel

假设我有UILabel,它涵盖了应用的整个窗口。在此标签中显示不同长度的随机文本。是否可以根据文本长度更改文本字体大小?

2 个答案:

答案 0 :(得分:7)

是的,UILabel可以为您做到这一点,只需:

theLabel.adjustsFontSizeToFitWidth = YES;
theLabel.minimumFontSize = MIN_FONT_SIZE;

注意这一点(来自文档):

  

仅当设置了numberOfLines属性时,此属性才有效   到1。

答案 1 :(得分:1)

我一度创建了一个类别方法。你基本上把它喂它一个矩形,它将返回一个适合的字体。也许你可以从以下粗略的例子中收集一些东西:

- (UIFont *)fontSizeForRect:(CGRect)rect withFont:(UIFont *)font lineBreakMode:(UILineBreakMode)lineBreakMode minFontSize:(CGFloat)minFontSize 
    {

            CGFloat fontSize = [font pointSize];
            UIFont *tempFont = [UIFont fontWithName:[font fontName] size:[font pointSize]];
            CGFloat acceptableFontSize = fontSize;
            while (fontSize > minFontSize) 
            {
               UIFont *testFont = [UIFont fontWithName:[tempFont fontName] size:fontSize];
               CGSize sizeWithTestFont = [self sizeWithFont:testFont constrainedToSize:CGSizeMake(rect.size.width, 99999.0) lineBreakMode:lineBreakMode];
                if (sizeWithTestFont.height > rect.size.height)
                    fontSize -= 1.0f; //Shrink the font size by a point
                else 
                {
                    //Fits.  Use it.  
                    acceptableFontSize = fontSize;
                    break;
                }
            }

            return [UIFont fontWithName:[font fontName] size:acceptableFontSize];
        }