2017-03-16 3 views
1

Ich habe eine TextView, die ich als Eingabefeld für ChatMessages verwenden. Ich möchte, dass es erweitert wird, wenn mehr Text vorhanden ist, als in eine Zeile passen könnte.iOS Swift3 TextView Zeile an falscher Position

func textViewDidChange(_ textView: UITextView) { 
    self.textViewHeight.constant = textView.contentSize.height 
} 

Ich programmiere eine Höhe Beschränkung programmgesteuert, wenn der Benutzer etwas in die TextView eingibt.

enter image description here < - Für einen Liner sieht es gut aus.

enter image description here < - Nachdem Sie die Eingabetaste drücken, wird es ausgeblendet.

enter image description here < - Die zweite Eingabe zeigt es wieder an.

Was mache ich hier falsch? Ich versuche das Aussehen von whatsapp/imessage neu zu erstellen, wo dieses Verstecken nicht passiert.

Antwort

2

Dies liegt daran, dass Sie die Größe in der falschen Delegat-Funktion ändern. Der Delegierte textViewDidChange wird aufgerufen, nachdem Sie die Bearbeitung beendet haben (resignFirstResponder wird aufgerufen).

sollten Sie Ihren Code setzen die Höhe in dieser Funktion stattdessen zu ändern:

optional func textView(_ textView: UITextView, 
    shouldChangeTextIn range: NSRange, 
     replacementText text: String) -> Bool 

diese So wird die Höhe des UITextView ändern, wie Sie nicht geben Sie, nachdem Sie die Eingabe beendet.

+0

Dies funktioniert gut, außer drücken Sie Return, wo es immer noch versteckt wird. Es sieht so aus, als ob ein Zeilenbruch nicht erkannt wird. Weißt du einen Weg, das auch zu beheben? –

+0

Können Sie versuchen, einige Ränder wie 'self.textViewHeight.constant = textView.contentSize.height + 10' zu setzen –

Verwandte Themen