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.

1voto

RawMean Punkte 7818

Eine schnelle Antwort: Der folgende Code berechnet die Höhe Ihrer textView.

                let maximumLabelSize = CGSize(width: Double(textView.frame.size.width-100.0), height: DBL_MAX)
                let options = NSStringDrawingOptions.TruncatesLastVisibleLine | NSStringDrawingOptions.UsesLineFragmentOrigin
                let attribute = [NSFontAttributeName: textView.font!]
                let str = NSString(string: message)
                let labelBounds = str.boundingRectWithSize(maximumLabelSize,
                    options: NSStringDrawingOptions.UsesLineFragmentOrigin,
                    attributes: attribute,
                    context: nil)
                let myTextHeight = CGFloat(ceilf(Float(labelBounds.height)))

Jetzt können Sie die Höhe Ihrer textView auf myTextHeight

0 Stimmen

Entschuldigung, was bedeutet das? let attribute = [NSFontAttributeName: textView.text.font!] Ist das wirklich fehlerfreier Swift-Code?) Meinten Sie let attribute = [NSFontAttributeName: textView.font!]

1voto

Dr. Marty Punkte 27

Ich hoffe, das hilft:

- (void)textViewDidChange:(UITextView *)textView {
  CGSize textSize = textview.contentSize;
  if (textSize != textView.frame.size)
      textView.frame.size = textSize;
}

0 Stimmen

Das funktioniert nicht! Es verursacht einen Fehler: "lvalue als linker Operand der Zuweisung erforderlich"

0 Stimmen

Sie können nur zuordnen textView.frame .

1voto

iOS Flow Punkte 69

Funktioniert wie ein Zauber auf ios 11 und ich arbeite in einer Zelle, wie eine Chat-Zelle mit Blase.

let content = UITextView(frame: CGRect(x: 4, y: 4, width: 0, height: 0))
content.text = "what ever short or long text you wanna try"
content.textAlignment = NSTextAlignment.left
content.font = UIFont.systemFont(ofSize: 13)
let spaceAvailable = 200 //My cell is fancy I have to calculate it...
let newSize = content.sizeThatFits(CGSize(width: CGFloat(spaceAvailable), height: CGFloat.greatestFiniteMagnitude))
content.isEditable = false
content.dataDetectorTypes = UIDataDetectorTypes.all
content.isScrollEnabled = false
content.backgroundColor = UIColor.clear
bkgView.addSubview(content)

0 Stimmen

Hinweis: Also diese Antwort ist nur zu markieren, dass Sie nicht haben, um die CGFloat.greatestFiniteMagnitude zu verwenden, wenn Sie Beschränkung auf eine bestimmte Breite oder Höhe -> spaceAvailable in meinem Fall kann max die Bildschirmbreite - Spacings und andere Etiketten Breite oder min die Bildschirmbreite es hängt alles davon ab, was ich anzeigen...

1voto

Hier ist die Antwort, wenn Sie die Größe ändern müssen textView y tableViewCell dynamisch in staticTableView

[ [https://stackoverflow.com/a/43137182/5360675\]\[1\]](https://stackoverflow.com/a/43137182/5360675][1])

1voto

Manju Punkte 4133

Der beste Weg, den ich herausgefunden habe, um die Höhe der UITextView entsprechend der Größe des Textes neu zu skalieren.

CGSize textViewSize = [YOURTEXTVIEW.text sizeWithFont:[UIFont fontWithName:@"SAMPLE_FONT" size:14.0]
                       constrainedToSize:CGSizeMake(YOURTEXTVIEW.frame.size.width, FLT_MAX)];

oder Sie können USE

CGSize textViewSize = [YOURTEXTVIEW.text sizeWithFont:[UIFont fontWithName:@"SAMPLE_FONT" size:14.0]
                       constrainedToSize:CGSizeMake(YOURTEXTVIEW.frame.size.width, FLT_MAX) lineBreakMode:NSLineBreakByTruncatingTail];

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