Сжатие текста внутри 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 не поддерживает автоматический расчет размера шрифта в многострочном режиме. Вы можете перебирать размеры шрифта, пока он не подойдет.
Также посмотрите на