Как я могу сделать текст с уменьшенным размером шрифта UILabel

Если UILabel содержит слишком много текста, как я могу настроить свою метку, чтобы она уменьшала размер шрифта?

Вот как я настраиваю свой UILabel:

     descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake(200, 30, 130, 150)];
    [descriptionLabel setFont:[Utils getSystemFontWithSize:14]];
    [descriptionLabel setBackgroundColor:[UIColor clearColor]];
    [descriptionLabel setTextColor:[UIColor whiteColor]];
    descriptionLabel.numberOfLines = 1;
    [self addSubview:descriptionLabel];

person Sheehan Alam    schedule 21.04.2010    source источник


Ответы (4)


descriptionLabel.adjustsFontSizeToFitWidth = YES;
descriptionLabel.minimumFontSize = 10.0; //adjust to preference obviously

Следующий пример протестирован и проверен на iPhone Simulator 3.1.2:

UILabel *descriptionLabel = [[UILabel alloc] initWithFrame:CGRectMake(90, 0, 200, 30)];

descriptionLabel.font = [UIFont systemFontOfSize:14.0];
descriptionLabel.minimumFontSize = 10.0;
descriptionLabel.adjustsFontSizeToFitWidth = YES;
descriptionLabel.numberOfLines = 1;
descriptionLabel.text = @"supercalifragilisticexpialidocious even thought he sound of it is something quite attrocious";
person prendio2    schedule 21.04.2010
comment
Я добавил эту строку, но, похоже, она не работает. Даже когда я указываю свой прямоугольник как что-то маленькое, например CGRectMake (200,30,10,10), ничего не происходит. - person Sheehan Alam; 21.04.2010
comment
Я не уверен, что именно возвращает ваш [Utils getSystemFontWithSize:]… Я редактирую свой ответ, чтобы включить в него пример, который я только что проверил и проверил. - person prendio2; 22.04.2010
comment
Начиная с iOS 6, вы должны использовать setMinimumScaleFactor вместо minimumFontSize. - person Joshua Gross; 05.11.2013
comment
Большое спасибо. Это только что сэкономило мне столько работы и времени. @ prendio2 - person Supertecnoboff; 26.01.2015

Чтобы изменить размер текста в многострочном UILabel, вы можете использовать этот вспомогательный метод (на основе код от 11 Pixel Studios):

+ (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 >= minSize; 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:UILineBreakModeWordWrap];
  if(labelSize.height <= aLabel.frame.size.height)
   break;
 }
 // Set the UILabel's font to the newly adjusted font.
 aLabel.font = font;
}
person Steve N    schedule 13.12.2010
comment
В вашем цикле for условие должно быть i >= minSize, а не i > 10 - person Christopher Pickslay; 08.07.2011

Установите _ 1_ свойство на ДА.

person kennytm    schedule 21.04.2010

Если вы хотите, чтобы количество строк также увеличивалось, если необходимо, используйте решение Стива Н с таким выражением if:

if(labelSize.height <= aLabel.frame.size.height)
{
  aLabel.numberOfLines = labelSize.height / font.lineHeight;

  break;
}
person Matthew Phillips    schedule 03.09.2011
comment
Или просто установите количество строк на 0. - person Jonathan; 30.10.2012