it-swarm.com.ru

NSAttributedString игнорирует автоматическое сжатие и numberOfLines для UILabel (iOS 6)

У меня есть UILabel с Количество строк = 2 Размер системного шрифта = 15 Минимальный размер шрифта = 8 Режим разрыва строки - Обрезать хвост

Когда я устанавливаю длинный текст, который имеет тип NSString для UILabel, он работает нормально и показывает многострочный текст (масштабируется при необходимости) . Когда я пытаюсь установить текст с типом NSAttributedString, он игнорирует минимальный размер шрифта и Autoshrink, поэтому я вижу текст одной строки с максимальным размером шрифта.

Возможно ли решить эту проблему

Выглядит примерно так (размер этикетки постоянный)

-----------------------
| normal NSString  Text|
| very  very  long ... | 
-----------------------

---------------------------
|NSAttributedString tex...|
---------------------------
20
Sergey Pekar

Я нашел способ сделать это:

label.adjustsFontSizeToFitWidth = true
label.attributedText = attributedString
label.lineBreakMode = .ByTruncatingTail // this did the trick!

Это работает, только если третья строка установлена ​​после установки приписанной строки. Кажется, что приписанная строка переопределяет поведение разрыва строки, когда установлено (среди прочего).

77
Julian B.

minimumFontSize устарела с iOS6. Кроме того, adaptsFontSizeToFitWidth работает только в том случае, если для numberOfLines установлено значение 1. UILabel не будет изменять размер текста в нескольких строках, поскольку существует неоднозначность в отношении обработки разрывов строк при уменьшении шрифта.

Используйте minimumScaleFactor, чтобы установить наименьший размер текста.

Следующий код заполнит UILabel приписанной строкой с размером шрифта 20 и уменьшит ее вдвое до минимального размера 10.

self.label.lineBreakMode = NSLineBreakByTruncatingTail;
NSMutableAttributedString *hogan = [[NSMutableAttributedString alloc] initWithString:@"Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan!"];
[hogan addAttribute:NSFontAttributeName
              value:[UIFont systemFontOfSize:20.0]
              range:NSMakeRange(0, [hogan length])];
[self.label setAttributedText:hogan];
self.label.adjustsFontSizeToFitWidth = YES;
self.label.numberOfLines = 1;
self.label.minimumScaleFactor = 0.5;
6
Andy Obusek
NSMutableAttributedString *muAtrStr = [[NSMutableAttributedString alloc]initWithString:@"2"];
NSAttributedString *atrStr = [[NSAttributedString alloc]initWithString:@"\ndays" attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:8]}];
[muAtrStr appendAttributedString:atrStr];
self.lbl.numberOfLines = 0;
[self.lbl setAttributedText:muAtrStr];
0
Swati