Dies funktioniert nicht mehr unter iOS 7 oder höher
Es gibt tatsächlich eine sehr einfache Möglichkeit, die Größe der UITextView
auf die richtige Höhe des Inhalts zu bringen. Dies kann mit dem Befehl UITextView
contentSize
.
CGRect frame = _textView.frame;
frame.size.height = _textView.contentSize.height;
_textView.frame = frame;
Es ist zu beachten, dass die korrekte contentSize
ist nur verfügbar après die UITextView
wurde der Ansicht hinzugefügt mit addSubview
. Davor ist sie gleich frame.size
Dies funktioniert nicht, wenn das automatische Layout eingeschaltet ist. Bei automatischem Layout ist der allgemeine Ansatz, die sizeThatFits
Methode und aktualisieren Sie die constant
Wert für eine Höhenbeschränkung.
CGSize sizeThatShouldFitTheContent = [_textView sizeThatFits:_textView.frame.size];
heightConstraint.constant = sizeThatShouldFitTheContent.height;
heightConstraint
ist eine Layoutbeschränkung, die Sie normalerweise über ein IBOutlet einrichten, indem Sie die Eigenschaft mit der in einem Storyboard erstellten Höhenbeschränkung verknüpfen.
Nur um diese erstaunliche Antwort zu ergänzen, 2014, wenn Sie:
[self.textView sizeToFit];
gibt es einen Unterschied im Verhalten mit dem iPhone6+ nur:
Nur beim 6+ (nicht beim 5s oder 6) wird der UITextView "eine weitere Leerzeile" hinzugefügt. Die "RL-Lösung" behebt dies perfekt:
CGRect _f = self.mainPostText.frame;
_f.size.height = self.mainPostText.contentSize.height;
self.mainPostText.frame = _f;
Es behebt das Problem der "zusätzlichen Zeile" auf 6+.
0 Stimmen
Bitte aktualisieren Sie die korrekte Antwort, da die akzeptierte Antwort zu unnötigen Berechnungen führt; jetzt gibt es eine contentSize-Eigenschaft für dieses Problem.
0 Stimmen
Warum gibt es keine Fragen dazu, wie man das nicht dynamisch machen kann? Ich kann nicht einmal herausfinden, wie man es statisch macht. Und die bereitgestellten Lösungen scheinen nicht zu "Einschränkungen" in Storyboard außer Kraft setzen.