Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adjust height of UITableViewCell to height of UITextView

I got two cells in my UITableView. One is a custom UITableViewCell and the other is a cell with a UITextView inside and called the type TextViewCell.

Because they are static I the cells are loaded in viewDidLoad method from a xib:

textCell = Bundle.main.loadNibNamed(String(describing: TextViewCell.self),
                                        owner: self, options: nil)?.first! as! TextViewCell
ratingCell = Bundle.main.loadNibNamed(String(describing: RatingCell.self),
                                          owner: self, options: nil)?.first! as! RatingCell

Now I try to change the height with the the heightForRowAt delegate:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.section == 1 {
        return textCell.textView.contentSize.height
    }
    return ratingCell.ratingView.frame.height
}

I disabled scrolling on the UITextView but the cell is not resizing properly. In fact the cells gets smaller. The constraints of the TextViewCell look like this: enter image description here

Any suggestions?

like image 250
Oliver Avatar asked Oct 20 '25 05:10

Oliver


2 Answers

I think you need to use self-sizing UITableViewCell. Replace your current implementation of heightForRowAt with the following:

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

    return UITableViewAutomaticDimension
}

Now height of cells in your UITableView object will be calculated automatically based on constraints. Also, add some estimated value for row height:

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

    return 100.0 // You can set any other value, it's up to you
}

Now you will see that the UITextView view fills the whole UITableViewCell cell.

like image 103
Roman Podymov Avatar answered Oct 21 '25 18:10

Roman Podymov


You should get the height of UITextView in heightForRowAt and return this height as cell height. See example below

        let lblDescLong = UITextView()
        lblDescLong.textAlignment = .left
        lblDescLong.text = “your text for text view”
        lblDescLong.font = YourFont(size: 12)
        let newSize = lblDescLong.sizeThatFits(CGSize(width: widthForTextView, height: CGFloat.greatestFiniteMagnitude))
        return newSize.height
like image 41
nerowolfe Avatar answered Oct 21 '25 20:10

nerowolfe



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!