Adjust UILabel height depending on the text Adjust UILabel height depending on the text ios ios

Adjust UILabel height depending on the text


sizeWithFont constrainedToSize:lineBreakMode: is the method to use. An example of how to use it is below:

//Calculate the expected size based on the font and linebreak mode of your label// FLT_MAX here simply means no constraint in heightCGSize maximumLabelSize = CGSizeMake(296, FLT_MAX);CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];   //adjust the label the the new height.CGRect newFrame = yourLabel.frame;newFrame.size.height = expectedLabelSize.height;yourLabel.frame = newFrame;


You were going in the right direction. All you need to do is:

myUILabel.numberOfLines = 0;myUILabel.text = @"Enter large amount of text here";[myUILabel sizeToFit];


In iOS 6 Apple has added a property to UILabel that greatly simplifies dynamic vertical resizing of labels: preferredMaxLayoutWidth.

Using this property in combination with lineBreakMode = NSLineBreakByWordWrapping and sizeToFit method allows easily resize a UILabel instance to the height that accommodates the entire text.

A quote from iOS documentation:

preferredMaxLayoutWidthThe preferred maximum width (in points) for a multiline label.

DiscussionThis property affects the size of the label when layout constraints are applied to it. During layout, if the text extends beyond the width specified by this property, the additional text is flowed to one or more new lines, thereby increasing the height of the label.

A sample:

...UILabel *status = [[UILabel alloc] init];status.lineBreakMode = NSLineBreakByWordWrapping;status.numberOfLines = 5; // limits to 5 lines; use 0 for unlimited.[self addSubview:status]; // self here is the parent viewstatus.preferredMaxLayoutWidth = self.frame.size.width; // assumes the parent view has its frame already set.status.text = @"Some quite lengthy message may go hereā€¦";[status sizeToFit];[status setNeedsDisplay];...