Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically Creating UILabel

I know this should be very simple, but I've been really struggling with creating a UILabel programmatically and getting it to behave the way I would like.

All I want is to be able to create a label, set the maximum attributes as far as height, width and font size, and then have the text get smaller AND/OR just truncate the text to accommodate long strings of text.

Let's say that I want my label to have text that has a maximum width of 380, a maximum height of 20 and a maximum font size of 12.

So here is what I have attempted to do to create such a label:

UILabel *fromLabel = [[UILabel alloc]initWithFrame:CGRectMake(91, 15, 0, 0)]; fromLabel.text = [self fromSender]; fromLabel.font = [UIFont fontWithName:ProximaNovaSemibold size:12]; //custom font fromLabel.numberOfLines = 1; fromLabel.baselineAdjustment = YES; fromLabel.adjustsFontSizeToFitWidth = YES; fromLabel.adjustsLetterSpacingToFitWidth = YES; fromLabel.size = [fromLabel.text sizeWithFont:fromLabel.font constrainedToSize:CGSizeMake(380, 20) lineBreakMode:NSLineBreakByTruncatingTail]; fromLabel.minimumScaleFactor = MIN_SCALE_FACTOR; fromLabel.clipsToBounds = YES; fromLabel.backgroundColor = [UIColor clearColor]; fromLabel.textColor = [UIColor blackColor]; fromLabel.textAlignment = NSTextAlignmentLeft; [collapsedViewContainer addSubview:fromLabel]; 

Ok, so the label appears, but the text is larger than 12 and the height always comes out to be 21!? Even if I change the height and text size values to extreme sizes, this code creates a label of some fixed size that can't be adjusted. The only thing I can seem to make smaller is the width.

I must be over looking something basic, but I really can't figure out how to get my desired result, nor do I understand why I'm getting the behavior that I am getting.

like image 357
jac300 Avatar asked Jul 23 '13 14:07

jac300


People also ask

What is UILabel in Swift?

A view that displays one or more lines of informational text.

How do I add UILabel to my storyboard?

In this field you can search for "Label" and "Button". When you have what you want, click and drag it to your storyboard.


1 Answers

Does the following work ?

UIFont * customFont = [UIFont fontWithName:ProximaNovaSemibold size:12]; //custom font NSString * text = [self fromSender];  CGSize labelSize = [text sizeWithFont:customFont constrainedToSize:CGSizeMake(380, 20) lineBreakMode:NSLineBreakByTruncatingTail];  UILabel *fromLabel = [[UILabel alloc]initWithFrame:CGRectMake(91, 15, labelSize.width, labelSize.height)]; fromLabel.text = text; fromLabel.font = customFont; fromLabel.numberOfLines = 1; fromLabel.baselineAdjustment = UIBaselineAdjustmentAlignBaselines; // or UIBaselineAdjustmentAlignCenters, or UIBaselineAdjustmentNone fromLabel.adjustsFontSizeToFitWidth = YES; fromLabel.adjustsLetterSpacingToFitWidth = YES; fromLabel.minimumScaleFactor = 10.0f/12.0f; fromLabel.clipsToBounds = YES; fromLabel.backgroundColor = [UIColor clearColor]; fromLabel.textColor = [UIColor blackColor]; fromLabel.textAlignment = NSTextAlignmentLeft; [collapsedViewContainer addSubview:fromLabel]; 

edit : I believe you may encounter a problem using both adjustsFontSizeToFitWidth and minimumScaleFactor. The former states that you also needs to set a minimumFontWidth (otherwhise it may shrink to something quite unreadable according to my test), but this is deprecated and replaced by the later.

edit 2 : Nevermind, outdated documentation. adjustsFontSizeToFitWidth needs minimumScaleFactor, just be sure no to pass it 0 as a minimumScaleFactor (integer division, 10/12 return 0). Small change on the baselineAdjustment value too.

like image 128
Nerkatel Avatar answered Sep 29 '22 20:09

Nerkatel