I am using the this method for getting the height of the UILabel Dynamically:
+(CGSize) GetSizeOfLabelForGivenText:(UILabel*)label Font:(UIFont*)fontForLabel Size: (CGSize)LabelSize{ label.numberOfLines = 0; CGSize labelSize = [label.text sizeWithFont:fontForLabel constrainedToSize:LabelSize lineBreakMode:NSLineBreakByCharWrapping]; return (labelSize); }
With this solution I am getting the exact size of UILabel if my code is running on below iOS 8 but if I run my application on iOS7 then it is returns a different value.
You have to dynamically set the frame, like below:
Tested on iOS 6 to iOS 12.2
Swift:
let constrainedSize = CGSize(width: self.titleLable.frame.size.width, height:9999) let attributesDictionary = [NSAttributedString.Key.font: UIFont.init(name: "HelveticaNeue", size: 11.0)] let string = NSAttributedString.init(string: "textToShow", attributes: attributesDictionary as [NSAttributedString.Key : Any]) var requiredHeight = string.boundingRect(with: constrainedSize, options: .usesLineFragmentOrigin, context: nil) if (requiredHeight.size.width > self.titleLable.frame.size.width) { requiredHeight = CGRect(x: 0, y: 0, width: self.titleLable.frame.size.width, height: requiredHeight.size.height) } var newFrame = self.titleLable.frame newFrame.size.height = requiredHeight.size.height self.titleLable.frame = newFrame
Objective C:
CGSize constrainedSize = CGSizeMake(self.resizableLable.frame.size.width , 9999); NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"HelveticaNeue" size:11.0], NSFontAttributeName, nil]; NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"textToShow" attributes:attributesDictionary]; CGRect requiredHeight = [string boundingRectWithSize:constrainedSize options:NSStringDrawingUsesLineFragmentOrigin context:nil]; if (requiredHeight.size.width > self.resizableLable.frame.size.width) { requiredHeight = CGRectMake(0,0, self.resizableLable.frame.size.width, requiredHeight.size.height); } CGRect newFrame = self.resizableLable.frame; newFrame.size.height = requiredHeight.size.height; self.resizableLable.frame = newFrame;
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