I have UILabel with number of lines = 2 system font size = 15 minimum font size = 8 Line break mode - Truncate tail
When I set long text which have type NSString for UILabel it works fine and shows multiline text (scaled if needed). When I am trying to set text with type NSAttributedString it ignores minimum font size and Autoshrink so I see one line text with maximum font size.
Is it possible to solve this problem
Looks something like this (Label size is const)
-----------------------
| normal NSString Text|
| very very long ... |
-----------------------
---------------------------
|NSAttributedString tex...|
---------------------------
I found a way to do this:
label.adjustsFontSizeToFitWidth = true
label.attributedText = attributedString
label.lineBreakMode = .ByTruncatingTail // this did the trick!
It only works if the third line is set after setting the attributed string. It seems like the attributed string overrides line break behavior when set (among other things).
minimumFontSize
is deprecated as of iOS6. Additionally, adjustsFontSizeToFitWidth only works when numberOfLines
is set to 1. UILabel will not resize text across multiple lines because there is ambiguity around handling line breaks while shrinking the font.
Use minimumScaleFactor
to set the smallest size that the text should be scaled.
The following code will populate a UILabel
with attributed string of font size 20, and scale it down by half to a minimum size of 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;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With