Julius Gambe
Julius Gambe

Reputation: 41

Xcode: Table View Cell not automatically adjusting its height

I'm having a problem with my table view cells as they do not adjust automatically with its content.

I have a label for a title and another label for a name. There is a text view below the two labels which is never displayed when the simulator runs.

This is what the Table View Cell is supposed to look like, however, this is what the Table View Cell displays.

I have pinned all elements inside the table view cell to the content view using constraints. I read up that adjusting the table view cell height itself will not work, so, I have to adjust the height from the table view itself.

It is set to automatic but it is not adjusting as seen here. I have also tried to set the estimated height to automatic but to no avail. The only solution was to set a custom height but it would look extremely weird if the text view contains only a few text as there would be a large white space. I did not add any code at all to adjust the size.

These are the following constraints:

Upvotes: 2

Views: 1450

Answers (3)

Milan Nosáľ
Milan Nosáľ

Reputation: 19757

By default the UITextView will not resize itself to fit its content. While you could use @Waqas Sultan approach, I would recommend to let the textView size itself. To achieve that, just use this:

textView.isScrollEnabled = false

Or, in storyboards, find the Scroll Enabled attributed and uncheck it.

This would make textView to size itself.

However, from the constraints you show it is hard to tell if there are really enough constraints to determine the proper frames for all the content - there are constraints related to Review label, but who knows how you constrained that label.

Not seeing all the relevant constraints in the tableView cell, I cannot guarantee that this will be enough to make it work as you expect (you might have forgotten about just a single one constraint, and it might be messing up your whole layout).

Upvotes: 1

Waqas Sultan
Waqas Sultan

Reputation: 894

First You need to add height constraint for textview and add its IBOUTlet then you need to override the updateconstraint of cell and do following in update constraints method.

override func updateConstraints() {
        super.updateConstraints()
        self.textViewHeightConstraint.constant = self.textView.contentSize.height
    }

and also for name label add bottom constraint.

Upvotes: 2

Nimish Sharma
Nimish Sharma

Reputation: 121

Hey buddy i would like you to try this way.

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {

    if indexPath.row == desiredIndexPath { // the index where you want automatic dimension
        return UITableViewAutomaticDimension
    } else {
        return 100 // the height of every other cell.
    }

}

note: Make sure that you do not give height to the label. Otherwise the label wont expand according to content.

Upvotes: 0

Related Questions