NSAttributedString игнорирует Autoshrink и numberOfLines для UILabel (iOS 6)
У меня есть UILabel с
количество строк = 2
размер шрифта системы = 15
минимальный размер шрифта = 8
Режим прерывания линии - обрезанный хвост
Когда я устанавливаю длинный текст, который имеет тип NSString для UILabel, он отлично работает и отображает многострочный текст (при необходимости масштабируется).
Когда я пытаюсь установить текст с типом NSAttributedString, он игнорирует минимальный размер шрифта и Autoshrink, поэтому я вижу один текст строки с максимальным размером шрифта.
Можно ли решить эту проблему?
Выглядит примерно так (размер метки const)
-----------------------
| normal NSString Text|
| very very long ... |
-----------------------
---------------------------
|NSAttributedString tex...|
---------------------------
Ответы
Ответ 1
Я нашел способ сделать это:
label.adjustsFontSizeToFitWidth = true
label.attributedText = attributedString
label.lineBreakMode = .ByTruncatingTail // this did the trick!
Он работает только в том случае, если третья строка задана после установки атрибутной строки. Похоже, что атрибутная строка перекрывает поведение разрыва строки при установке (между прочим).
Ответ 2
minimumFontSize
устарел с iOS6. Кроме того, adjustsFontSizeToFitWidth работает только тогда, когда для параметра 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;
Ответ 3
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];