From 44da2510068b0e8e0e5d07bc2d989a49c74f6b3b Mon Sep 17 00:00:00 2001 From: Damien Pontifex Date: Thu, 26 Mar 2015 13:31:20 +0000 Subject: [PATCH] Fixes for scroll jumping when multi line text input changes size Fixes proposed via #1 by @joshdance and @ItsTipTop to only update table when height changes and disable animations to stop scroll view jumping --- .../MultiLineTextInputTableViewCell.swift | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/SelfSizingTextViewTableCell/SelfSizingTextViewTableCell/MultiLineTextInputTableViewCell.swift b/SelfSizingTextViewTableCell/SelfSizingTextViewTableCell/MultiLineTextInputTableViewCell.swift index 5482b3d..f1877df 100644 --- a/SelfSizingTextViewTableCell/SelfSizingTextViewTableCell/MultiLineTextInputTableViewCell.swift +++ b/SelfSizingTextViewTableCell/SelfSizingTextViewTableCell/MultiLineTextInputTableViewCell.swift @@ -55,10 +55,19 @@ class MultiLineTextInputTableViewCell: UITableViewCell { extension MultiLineTextInputTableViewCell: UITextViewDelegate { func textViewDidChange(textView: UITextView!) { - // Only way found to make table view update layout of cell - // More efficient way? + let size = textView.bounds.size + let newSize = textView.sizeThatFits(CGSize(width: size.width, height: CGFloat.max)) - tableView?.beginUpdates() - tableView?.endUpdates() + // Resize the cell only when cell's size is changed + if size.height != newSize.height { + UIView.setAnimationsEnabled(false) + tableView?.beginUpdates() + tableView?.endUpdates() + UIView.setAnimationsEnabled(true) + + if let thisIndexPath = tableView?.indexPathForCell(self) { + tableView?.scrollToRowAtIndexPath(thisIndexPath, atScrollPosition: .Bottom, animated: false) + } + } } }