// MARK: - getting dynamic height of a string
convenience init(for bodyText: String, width: CGFloat) {
if (bodyText.characters.count ?? 0) <= 0 {
    return 0
}
let cellFont = UIFont(name: "Helvetica", size: 15.0)
    //UIFont *cellFont = [UIFont systemFontOfSize:13.f];
var paragraphStyle = NSMutableParagraphStyle.default.mutableCopy()
paragraphStyle.lineSpacing = 1
paragraphStyle.lineHeightMultiple = 1.0
/// Set line break mode
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping
/// Set text alignment
paragraphStyle.alignment = .natural
let attributesDictionary: [AnyHashable: Any] = [
        NSFontAttributeName : cellFont!,
        NSParagraphStyleAttributeName : paragraphStyle
    ]
let expectedLabelSize = bodyText.boundingRect(with: CGSize(width: width, height: FLT_MAX), options: .usesLineFragmentOrigin, attributes: (attributesDictionary as? [String : Any] ?? [String : Any]()), context: nil).size
Objective-C version:
#pragma mark - getting dynamic height of a string
+ (CGFloat)heightForText:(NSString *)bodyText width:(CGFloat)width
{
    if(bodyText.length<=0)
    {
        return 0;
    }
    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:15.0f];
    //UIFont *cellFont = [UIFont systemFontOfSize:13.f];
    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy];
    [paragraphStyle setLineSpacing:1];
    paragraphStyle.lineHeightMultiple = 1.0f;
    /// Set line break mode
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
    /// Set text alignment
    paragraphStyle.alignment = NSTextAlignmentNatural;
    NSDictionary *attributesDictionary = [NSDictionary dictionaryWithObjectsAndKeys:
                                      cellFont, NSFontAttributeName,
                                      paragraphStyle,NSParagraphStyleAttributeName,
                                      nil];
    CGSize expectedLabelSize = [bodyText boundingRectWithSize:CGSizeMake(width, FLT_MAX)
                                                  options:NSStringDrawingUsesLineFragmentOrigin
                                               attributes:attributesDictionary
                                                  context:nil].size;
    NSLog(@"height%@",NSStringFromCGSize(expectedLabelSize));
    return expectedLabelSize.height;
}