2017-11-15 6 views
0

Ich arbeite an einer Ansicht, die ein UITextView enthält. Die Schätzung der korrekten Höhe für den Inhalt funktioniert problemlos, aber wenn Sie fortlaufend tippen, wird der Inhalt horizontal über dem Rahmen vergrößert. Welche sieht wie folgt aus:UITextView: Linie automatisch brechen, wenn eine feste Breite erreicht wird

enter image description here

Gibt es eine praktische Lösung, die automatisch die Leitung bricht, wenn die durch Autolayout definiert maximale Breite erreicht?

+0

Mögliche Problemumgehung: Legen Sie im Attributinspektor "Zeilen" auf 2 oder mehr fest. –

+0

Ich arbeite mit UITextView, die keine 'Linien' Attribut haben – Raoul

Antwort

0

Wenn Sie eine Grenze von caracters oder die Anzahl der Linien fixieren möchten, können Sie durch eine Methode aus UITextView Delegat func textView(UITextView, shouldChangeTextIn: NSRange, replacementText: String)

+0

Dieses Verhalten ist nicht genau das, was ich suche. Ich möchte, dass meine Anwendung dem Text einen Zeilenumbruch hinzufügt, der stattdessen über den Rahmen hinaus wächst – Raoul

0

Die Lösung kam ich mit ein ziemlich einfacher Ansatz genannt Umsetzung:

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { 
    let size = textView.sizeThatFits(textView.frame.size) 
    if size.width >= self.maxTextViewWidth { 
     let subString = textView.text.suffix(1) 
     textView.text.removeLast(1) 
     textView.text.append(contentsOf: "\n" + subString) 
    } 

    return true 
}