2017-01-26 3 views
0

Ich habe TextView in meinem TableView und seine Höhe muss je nach Inhalt erhöht werden. Ich mache es dieseDynamische TextView-Höhe in TableView

override func viewDidLoad() { 
    super.viewDidLoad() 

    tableView.estimatedRowHeight = 70 
    tableView.rowHeight = UITableViewAutomaticDimension 
    textView.delegate = self 
    textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 

} 
extension TableViewController: UITextViewDelegate { 
    func textViewDidChange(_ textView: UITextView) { 
    let currentOffset = tableView.contentOffset 
    UIView.setAnimationsEnabled(false) 
    tableView.beginUpdates() 
    tableView.endUpdates() 
    UIView.setAnimationsEnabled(true) 
    tableView.setContentOffset(currentOffset, animated: false) 
    } 
} 

Tableview sind mit statischen Zellen. Habe dem TextView Constraints korrekt zugewiesen. Mein Hauptanliegen hier ist, dass der Delegierte von textView nicht aufgerufen wird. Ich habe einen Haltepunkt hinzugefügt, um es zu überprüfen.

+0

Hoffentlich [diese Antwort] (http://stackoverflow.com/questions/ 39868532/can-i-change-height-of-uitableviewcell-real-time/39870884 # 39870884) könnte für Ihren Fall nützlich sein ... –

+0

@AhmadF Aber meine Delegierten werden nicht angerufen. – Nitesh

+0

Nun, das ist eine andere Geschichte :) Stellen Sie sicher, dass alles so verbunden ist, wie es sollte ... –

Antwort

1

Wenn Sie den Text eines UITextView manuell mit Code festlegen, wird die textViewDidChange: -Methode nicht aufgerufen. (Wenn Sie den Delegat-Satz Ihrer Textansicht haben, wird es aufgerufen, wenn der Benutzer es bearbeitet.)

Eine mögliche Abhilfe wäre, TextViewDidChange manuell aufzurufen: Sie können den Text jederzeit bearbeiten. Zum Beispiel:

textView.delegate = self 
textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 
self.textViewDidChange(self.textView) 

Art einer hackish Art und Weise, es zu tun, aber es die Arbeit, die Sie

Hope Diese Hilfe getan wird.

bearbeiten

versuchen, diese es Arbeit für mich

class TableViewController: UITableViewController { 

@IBOutlet weak var textView: UITextView! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.estimatedRowHeight = 70 
    tableView.rowHeight = UITableViewAutomaticDimension 
    textView.delegate = self 
    textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 
    self.textViewDidChange(self.textView) 
} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 
    return 70 
} 
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.item == 1{//****Or index of your textView**** 
     return textView.contentSize.height; 
    } 
    return 70 

} 

} 

extension TableViewController: UITextViewDelegate { 
func textViewDidChange(_ textView: UITextView) { 
     tableView.reloadData() 
     } 
} 

aktualisieren

class TableViewController: UITableViewController { 

@IBOutlet weak var textView: UITextView! 
override func viewDidLoad() { 
    super.viewDidLoad() 
    tableView.estimatedRowHeight = 70 
    tableView.rowHeight = UITableViewAutomaticDimension 
    textView.delegate = self 
    textView.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." 
    self.textViewDidChange(self.textView) 
    tableView.reloadData() 

} 

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

override func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 
    return 70 
} 
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
    if indexPath.item == 0{//****Or index of your textView**** 
     return textView.contentSize.height; 
    } 
    return 70 

} 

} 

extension TableViewController: UITextViewDelegate { 
func textViewDidChange(_ textView: UITextView) { 

} 

func textViewDidEndEditing(_ textView: UITextView) { 
    tableView.reloadData() 
} 
} 
+0

Dadurch wird mein Delegat aufgerufen, wenn die Höhe der Tabellenansicht nicht erhöht wurde. – Nitesh

+0

https://drive.google.com/open?id=0B3IEvVMPx1JdWU9HckpDSlM1OGc – Nitesh

+0

Ok, ich habe es gefunden. Sie ändern die Größe der Zelle nicht, da textView nicht den Rahmen ändert, sondern contentSize, da sie eine scrollView enthält. –