Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Dynamically change cell's height while typing text, and reload the containing tableview for resize

I'm trying to have a UITableView with several cells types. One of my cells needs to dynamically change his height while typing text in it. Here is the code for change the cell's height (in the cell's class), which works good:

func textViewDidChange(_ textView: UITextView)
{
    var newFrame:CGRect = noteTextView.frame
    newFrame.size.height = noteTextView.contentSize.height
    noteTextView.frame = newFrame
    self.frame = CGRect(x: self.frame.origin.x, y: self.frame.origin.y, width: self.frame.width, height: noteTextView.contentSize.height)
}

But the cell is overlaying the cell under him. Nor adding those lines on the parent tableView member helped:

mParentTableView.setNeedsLayout()
mParentTableView.layoutIfNeeded()

Any idea how to tell the tableView recalc its contained cells sizes ?

(XCode 9, Swift 4)

like image 891
Yaron Abramovich Avatar asked Sep 12 '25 12:09

Yaron Abramovich


2 Answers

Using tableView's [tableView beginUpdates] and [tableView endUpdates] will solve this issue. See this answer for more information.

like image 61
Matic Avatar answered Sep 15 '25 01:09

Matic


Set delegate On Your UITableViewCell like that

var textDidChanges: (() -> Void)? = nil

func textViewDidChange(_ textView: UITextView) {
    textDidChanges?()
}

and Your tableView cellForRowAt

cell.textDidChanges = {
    self.tableView.beginUpdates()
    self.tableView.endUpdates()
} 

How to make a UITableViewCell with a UITextView inside, that dynamically adjust its height, on the basis of the UITextView?

like image 36
AshvinGudaliya Avatar answered Sep 15 '25 00:09

AshvinGudaliya