0
votes

Hello guys i have a UITableView in which i have a UITableViewCell which contains UILabel for displaying title and another UILabel for showing description. The Height of UITableViewCell is calculated based on the text of title label and description label.

Following is UITableView method to return height of cell in which i am calculating height of cell based on the text of name and description field.

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    var height: CGFloat = 60

    if empCornerSC.selectedSegmentIndex == 0{

        let kra = kraList[indexPath.row]
        let maxSize = CGSize(width: 200 , height: 1000)
        let nameLabelSize = rectForText(text: kra.kraName!, font: 16, maxSize: maxSize)
        let descriptionLabel = rectForText(text: kra.kraDescription!, font: 14, maxSize: maxSize)
        height = nameLabelSize.height + descriptionLabel.height
        height = height + 20
    }
    return height
}

Method to calculate height based on text and font, I got this method from Youtube Lets Build That App

func rectForText(text: String, font: CGFloat, maxSize: CGSize) -> CGRect {

    let options = NSStringDrawingOptions.usesFontLeading.union(.usesLineFragmentOrigin)
    return NSString(string: text).boundingRect(with: maxSize, options: options, attributes: [NSAttributedStringKey.font: UIFont.systemFont(ofSize: font)], context: nil)
}

i am able to get dynamic size for my UITableViewCell but it is inconsistent check the screenshot as you can see in the image, if the label and description text are large the cell height is large and when the content of lebel are less then the size is also less. I want the cell height related to the size of content. Please help me. Thank you in advance.

1

1 Answers

0
votes

Change let maxSize = CGSize(width: 200 , height: 1000) to let maxSize = CGSize(width: labelWidth , height: 1000)

labelWidth should be the maximum width allowed for a particular label. You can use something like [[UIScreen mainScreen] bounds].size.width - [XX](40/50 etc. based on your constraints). In this case 200 seems to be very less as seen in the screenshot attached