565 Stimmen

Wie kann ich die Größe einer UITextView an den Inhalt anpassen?

Gibt es eine gute Möglichkeit, die Größe einer UITextView mit ihrem Inhalt übereinstimmen? Sagen wir, ich habe zum Beispiel eine UITextView die eine Textzeile enthält:

"Hello world"

Dann füge ich eine weitere Textzeile hinzu:

"Goodbye world"

Gibt es eine gute Möglichkeit in Cocoa Touch, die rect die alle Zeilen in der Textansicht enthält, so dass ich die übergeordnete Ansicht entsprechend anpassen kann?

Ein weiteres Beispiel ist das Feld "Notizen" für Ereignisse in der Kalenderanwendung - beachten Sie, wie die Zelle (und die UITextView enthält) wird erweitert, um alle Textzeilen der Notenzeichenfolge aufzunehmen.

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.

7voto

Die folgenden Dinge sind ausreichend:

  1. Denken Sie einfach daran, die Scrolling aktiviert a NO für Ihre UITextView :

enter image description here

  1. Richtig eingestellte Auto-Layout-Einschränkungen.

Sie können sogar UITableViewAutomaticDimension .

7voto

f0go Punkte 222

Die Verwendung von UITextViewDelegate ist der einfachste Weg:

func textViewDidChange(_ textView: UITextView) {
    textView.sizeToFit()
    textviewHeight.constant = textView.contentSize.height
}

7voto

Swaroop S Punkte 480

Wenn Sie autolayout verwenden und sizetofit nicht funktioniert, dann überprüfen Sie bitte einmal Ihre Breitenbeschränkung. Wenn Sie die Breitenbeschränkung vergessen haben, wird die Höhe korrekt sein.

Es ist nicht nötig, eine andere API zu verwenden. Eine einzige Zeile würde alle Probleme lösen.

[_textView sizeToFit];

Hier ging es mir nur um die Höhe, während die Breite fest blieb, und ich hatte die Breitenbeschränkung meiner TextView im Storyboard übersehen.

Damit sollten die dynamischen Inhalte der Dienste angezeigt werden.

Ich hoffe, das könnte helfen.

6voto

Olie Punkte 24279

In Verbindung mit der Antwort von Mike McMaster könnten Sie etwas wie folgt tun:

[myTextView setDelegate: self];

...

- (void)textViewDidChange:(UITextView *)textView {
  if (myTextView == textView) {
     // it changed.  Do resizing here.
  }
}

5voto

aliozkara Punkte 4742

Blättern deaktivieren

Vorbehalte hinzufügen

und fügen Sie Ihren Text hinzu

[yourTextView setText:@"your text"];
[yourTextView layoutIfNeeded];

wenn Sie UIScrollView sollten Sie auch dies hinzufügen;

[yourScrollView layoutIfNeeded];

-(void)viewDidAppear:(BOOL)animated{
    CGRect contentRect = CGRectZero;

    for (UIView *view in self.yourScrollView.subviews) {
         contentRect = CGRectUnion(contentRect, view.frame);
    }
    self.yourScrollView.contentSize = contentRect.size;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X