2017-03-16 1 views
2

Um meine Textview der Größe seine Höhe mit dem Inhalt zu machen, verwende ich den folgenden Code:swift3 iOS eingestellt UITextView Höhe, wenn Zeilenumbruch geschieht

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    let contentSize = textView.sizeThatFits(textView.bounds.size) 
    self.textViewHeight.constant = contentSize.height 

    //textViewHeight is the height constraint of the textView defined in the storyboard. 

    return true 
} 

Das Problem ist, dass es eine Änderung in der Größe erkennt, wenn eine Linie Pause passiert. Wenn Sie die Eingabetaste drücken, wird die Größe nicht geändert, bis Sie ein weiteres Zeichen hinzufügen. Das gleiche passiert, wenn Sie genug Text schreiben, um einen Zeilenumbruch zu machen. Die Größe ändert sich erst, nachdem Sie ein anderes Zeichen eingegeben haben. Das gleiche passiert, wenn Sie ein Zeichen löschen, um eine Linie zu entfernen, müssen Sie ein anderes Zeichen entfernen, um die Höhe zu ändern. Ich denke, das sieht schlampig aus, da iMessage und WhatsApp dieses Verhalten nicht teilen, wenn Sie Ihre Nachrichten schreiben.

Was fehlt mir hier?

Antwort

1

Verwenden Sie den folgenden Code:

func textViewDidChange(_ textView: UITextView) { 
let fixedWidth = textView.frame.size.width 
let newSize = textView.sizeThatFits(CGSize.init(width: fixedWidth, height: CGFloat(MAXFLOAT))) 
var newFrame = textView.frame 
newFrame.size = CGSize.init(width: CGFloat(fmaxf(Float(newSize.width), Float(fixedWidth))), height: newSize.height) 
self.textViewHeight.constant = newSize.height 
} 

Glücklich Codierung.

+0

Vielen Dank für Ihre Hilfe, aber es verhält sich immer noch wie beschrieben:/ –

+0

Bitte überprüfen Sie die aktualisierte Antwort Dies ist der Code, den ich in meinem Projekt verwende. Kopieren Sie die gesamte Funktion. Es wird definitiv wie gewünscht funktionieren. Versuchen Sie, den newFrame-Wert beim Brechen einer Zeile auszugeben. –

+0

Danke, das funktioniert! Ich musste das Scrollen deaktivieren. Kennen Sie einen Weg, dies zu erreichen, wenn das Scrollen aktiviert ist? –

Verwandte Themen