最小字体大小问题

时间:2012-12-02 20:42:49

标签: iphone ios uilabel

我已经设置了一个标签,标签上有一些文字。现在我想设置所有文本适合标签的字体。我使用了最小字体大小,因为标签文本每天都在变化。但突然之间它不会起作用。我做错了什么?

这是我的代码:

CGRect infoLabelRect = CGRectMake(10, 250, 260, 350);


UILabel *infoLabel = [[UILabel alloc] initWithFrame:infoLabelRect];
infoLabel.text = @"bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla";
infoLabel.numberOfLines = 9;
infoLabel.font = [UIFont systemFontOfSize:17];
infoLabel.minimumFontSize = 12;
infoLabel.adjustsFontSizeToFitWidth = YES;
infoLabel.textColor = [UIColor whiteColor];
infoLabel.textAlignment = NSTextAlignmentCenter;
infoLabel.backgroundColor = [UIColor clearColor];
infoLabel.shadowColor = [UIColor blackColor];
infoLabel.shadowOffset = CGSizeMake(0, 1);
[infoLabel sizeToFit];

我尝试了什么rmaddy悲伤,但没有显示文字。

这是我的代码不起作用。 有什么建议吗?

UILabel *infoLabel = [[UILabel alloc] initWithFrame:infoLabelRect];
    NSString *text = @"bla bla bla";
    UIFont *font = nil;
    CGFloat points = 17;
    CGFloat maxHeight = infoLabel.frame.size.height;
    CGFloat textHeight;
    do {
        font = [UIFont systemFontOfSize:points];
        CGSize size = CGSizeMake(infoLabelRect.size.width, 100000);
        CGSize textSize = [text sizeWithFont:font constrainedToSize:size lineBreakMode: NSLineBreakByWordWrapping];
        textHeight = textSize.height;
        points -= 1;
    } while (textHeight > maxHeight);

    infoLabel.font = font;
    infoLabel.textColor = [UIColor whiteColor];
    infoLabel.textAlignment = NSTextAlignmentCenter;
    infoLabel.backgroundColor = [UIColor clearColor];
    infoLabel.shadowColor = [UIColor blackColor];
    infoLabel.shadowOffset = CGSizeMake(0, 1);
    [infoLabel sizeToFit];
    [contentView addSubview:infoLabel];

1 个答案:

答案 0 :(得分:2)

minimumFontSize的使用仅适用于一行的标签。多行或包装标签不会尝试调整字体大小。

来自minimumFontSize的文档:

  

此属性的默认值为0.0。如果为标签启用字体调整,则应始终增加此值。仅当numberOfLines属性设置为1时,此属性才有效。

一种解决方案是利用NSString sizeWithFont:constrainedToSize:lineBreakMode:方法计算使标签文本适合分配空间所需的字体大小。

编辑:应该工作的东西(这没有经过测试,可能是拼写错误):

NSString *text = @"hello";
UIFont *font = nil;
CGFloat points = 17;
CGFloat maxHeight = infoLabel.frame.size.height;
CGFloat textHeight;
do {
    font = [UIFont systemFontOfSize:points];
    CGSize size = CGSizeMake(infoLabelRect.size.width, 100000);
    CGSize textSize = [text sizeWithFont:font constrainedToSize:size lineBreakMode: NSLineBreakByWordWrapping];
    textHeight = textSize.height;
    points -= 1;
} while (textHeight > maxHeight);

infoLabel.font = font;