Megan Wood
Megan Wood

Reputation: 13

Dynamic row height in UITableView using custom cell from xib

I'm having a lot of issues getting my custom cells to use the dynamic row height.

Here is the xib of my custom cell.

XIB

In viewDidLoad for my table view, I set these values:

self.tableView.estimatedRowHeight = 80.0
self.tableView.rowHeight = UITableViewAutomaticDimension

but it doesn't seem to use the dynamic size when it loads the table.

Below is my cellForRowAtIndexPath function.

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // Configure the cell...

    let cell = Bundle.main.loadNibNamed("RedditCell", owner: self, options: nil)?.first as? RedditPostCellTableViewCell

    let post = self.model?.getPostAt(index: indexPath.row)
    cell?.title.text = post?.title
    cell?.author.text = post?.author
    cell?.upvotes.text = "\(post?.upvotes ?? -1)"

    return cell!
}

Table view when I run my app

I can't figure out why this isn't working. Any help would be appreciated!

Upvotes: 1

Views: 3368

Answers (3)

DisastrousEcho
DisastrousEcho

Reputation: 693

You don't need to pre-calculate the height. The problem is with your constraints in your custom UITableViewCell. Your constraints should be set up the way to force UITableViewCell to expand to show the whole label or any other content. Just setup constraints similar to my short example project: https://www.transfernow.net/216sw6l1bler?lng=en, and cell height will be automatically set, as you expected.

Screenshot: enter image description here

Upvotes: 0

Martin Muldoon
Martin Muldoon

Reputation: 3428

In addition to setting the constraints so that the height of all of the elements in the cell + padding can be used to calculated the overall cell height, you must set the number of lines of your labels to zeros and set them to word wrap if these must grow based on content as well.

Upvotes: 0

Vini App
Vini App

Reputation: 7485

Please try to set the height in the heightForRowAt

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    self.tableView.estimatedRowHeight = 80
    return UITableViewAutomaticDimension
}

Upvotes: 0

Related Questions