Isha Balla Isha Balla - 2 months ago 6
Swift Question

How to resize the custom UITableViewCell to fit content?

Basically, I have a cell with 10 labels and currently I have fixed its height to 300. However, the labels might or might not have value and if the labels do not have certain value, then I need to hide them. Checking null condition for each and every label and then adjusting the height likewise is lengthy and messy. Is there any other way to achieve what I am looking for?
enter image description here

Answer

This is an example of an idea, what I would suggest. I hope this could help you to find an optimised one for you.

If I would assume, your data source is like this:

// array of arrays of strings
var Array : [[String]] = [
     ["Label1", "Label2", "Label3", "Label4"],
     ["Label1", "Label2"],
     ["Label1", "Label2", "Label3", "Label4", "Label5", "Label6"],
]

these methods could be implemented:

func calculateExpectedHeight(withItemsCount: Int) -> CGFloat
{
    let titleHeight = 32.0 // this is e.g. your Layer Conf. label
    let itemHeight = 18.0 // this is for a label unit that is repeating

    return CGFloat(titleHeight) + CGFloat((Double(withItemsCount) * itemHeight)) + 12.0 //twelve is just for tuning
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let dataForThisRow = Array[indexPath.row]
    return calculateExpectedHeight(withItemsCount: dataForThisRow.count)
}