Сжатие текста внутри UIlabel программно

Я пытаюсь сжать текст внутри UILabel. Мой текст представляет собой строку, у меня максимум 7 строк, и иногда этого недостаточно, поэтому мне нужно сжать текст, чтобы поместиться в эти 7 строк. Вот мой код.

// create label
    UILabel *desc = [[UILabel alloc] initWithFrame:CGRectMake(5, 220, 310, 200)];
    desc.backgroundColor = [UIColor colorWithRed:0.8 green:0.8 blue:0.8 alpha:1];
    desc.font = [UIFont fontWithName:@"Helvetica" size:30];
    desc.numberOfLines = 7;
    desc.textColor = [UIColor blackColor];
    desc.layer.borderColor = [UIColor blackColor].CGColor;
    desc.layer.borderWidth = 1.0;
    desc.text = // MY string ;
    desc.adjustsFontSizeToFitWidth = YES;
    [self.view addSubview:desc];`

Я пытался даже [desc sizeToFit];

Я не могу понять, что я делаю неправильно. Я уже проверил все сообщения об этом.

Спасибо за любую помощь

2 ответа

Вы можете использовать вспомогательную функцию, чтобы изменить ее размер. Вот пример. Я просто изменил lineBreakMode на NSLineBreakByWordWrapping (так как предыдущий устарел в iOS6).

+ (void)resizeFontForLabel:(UILabel*)aLabel maxSize:(int)maxSize minSize:(int)minSize
{
    // use font from provided label so we don't lose color, style, etc
    UIFont *font = aLabel.font;

    // start with maxSize and keep reducing until it doesn't clip
    for(int i = maxSize; i > 10; i--) {
        font = [font fontWithSize:i];
        CGSize constraintSize = CGSizeMake(aLabel.frame.size.width, MAXFLOAT);

        // This step checks how tall the label would be with the desired font.
        CGSize labelSize = [aLabel.text sizeWithFont:font constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping];
        if(labelSize.height <= aLabel.frame.size.height)
            break;
    }
    // Set the UILabel's font to the newly adjusted font.
    aLabel.font = font;
}

Насколько я знаю, UILabel не поддерживает автоматический расчет размера шрифта в многострочном режиме. Вы можете перебирать размеры шрифта, пока он не подойдет.

Также посмотрите на

sizeWithFont: forWidth: lineBreakMode:

Другие вопросы по тегам