ios - uitextview fit text




Holen Sie sich nach dem Einstellen von Text die dynamische Höhe von UITextView mit automatischem Layout (8)

Ich habe den Code verwendet, der auf dem folgenden Link AutoLayout mit Dynamic UITextView height angegeben wurde und es hat für mich funktioniert :)

Ich habe eine UITextView nicht scrollbar mit Auto-Layout-Set von Interface Builder, und der Text erhöhen oder verringern dynamisch ohne Probleme, aber ich möchte wissen, was ist die neue UITextView Höhe nach dem Einstellen von Text, ich versuche, dies zu tun:

NSLog(@"text before: %.2f",self.myText.frame.size.height);
[self.myText setText:self.string];
NSLog(@"text after: %.2f",self.myText.frame.size.height);

das ist das Ergebnis:

text before: 47.50
text after: 47.50

der Text wird in der Ansicht vergrößert, wenn ich ihn ausführe, aber die Größe ist die gleiche, wie kann ich die wahre Höhe nach dem Setzen von Text bekommen?


Das sollte funktionieren:

NSLog(@"text before: %.2f",self.myText.frame.size.height);
[self.myText setText:self.string];
[self.myText layoutIfNeeded]; // <--- Add this
NSLog(@"text after: %.2f",self.myText.frame.size.height);

Hier ist eine Beispielimplementierung auf meinem Github: https://github.com/guillaume-algis/SO-27060338


Im Gegensatz zu UILabel hat UITextView keine Eigenschaftsgröße. Also, wie ich es gemacht habe, wurde die UITextView eingerichtet, sie über IBOutlet angehakt und ihren Wert in textViewDidChange oder wenn Text sich ändert.

@IBOutlet weak var textViewHeight: NSLayoutConstraint!

func textViewDidChange(textView: UITextView) {

    // dynamic height adjustments

    var height = ceil(textView.contentSize.height) // ceil to avoid decimal

    if height != textViewHeight.constant { // set when height changed
        textViewHeight.constant = height
        textView.setContentOffset(CGPointZero, animated: false) // scroll to top to avoid "wrong contentOffset" artefact when line count changes
    }
}

Wählen Sie textview und deaktivieren Sie "Scrolling enabled"

wähle Textansicht aus dem oberen Menü "Editor> Größe passend zum Inhalt"

Wählen Sie die darunter liegende Ansicht aus, legen Sie die oberen Beschränkungen mit der Textansicht unten auf den gewünschten Rand fest , wechseln Sie zu " Größeninspektor ", doppelklicken Sie oder bearbeiten Sie die gerade hinzugefügte Abhängigkeit und setzen Sie die Beziehung auf "Größer als oder gleich "


Schnelles 3.0

textView.isScrollEnabled = false

Dies ermöglicht AutoLayout seine Arbeit zu machen.


Wenn Sie es vorziehen, alles durch automatisches Layout zu machen:

Im Größeninspektor:

  1. Setzen Sie die Komprimierungswiderstandspriorität für Inhaltskomprimierung auf 1000.

  2. Verringern Sie die Priorität der Constraint-Höhe für Ihre UITextView. Mach es einfach unter 1000.

Im Bereich "Attribute":

  1. Deaktivieren Sie das Kontrollkästchen Scrollen Aktiviert.

Alles, was Sie tun müssen, ist alle Ihre Nebenbedingungen außer der Höhe einzustellen und textView scrollEnabled auf NO . Der letzte Teil ist der Trick. Ihre Textansicht wird automatisch in Abhängigkeit von ihrem Textwert skaliert.


Gleich nach dem Ändern des Textanrufs

[self.myText sizeToFit];




uitextview