2016-11-08 2 views
0

Benötigen Sie Hilfe. Ich baue eine Chat-App und möchte, dass der Chat textView sich an die Breite des Textes anpasst. Wenn die Nachricht also kurz ist, passt sich der textView entsprechend an. Ich verwende Autolayout, kann aber nicht herausfinden, wie die Constraint-Konstante basierend auf der Textzeilenlänge von textView dynamisch angepasst werden kann. Vielen Dank.UITextView Dynamische Breite mit Text iOS

Wie ich es jetzt:

enter image description here

Constraints:

enter image description here

+0

verwenden Sie UITableViewAutomaticDimension –

+0

Ja, aber das scheint nur auf die Höhe der Zelle – dcotter

Antwort

0

enter image description here

plz erinnern diese

1 die Etikettenbreite eingestellt es ist Bezug auf größer oder gleich> 0

Schritte beheben 2 nehmen Sie die nachstehende Einschränkung, setzen Sie ihre Beziehung auf größer als oder gleich> 0

+0

Danke balkaran. Die Verwendung eines Labels mit der nachgestellten Bedingung, die auf> = 0 gesetzt wurde, endete mit dem Trick – dcotter

+0

welcome @dcotter :) –

0

Sie Raum nachlauf löschen können Super von Textlänge erhalten Breite können Sie versuchen?

+0

kümmern, wenn ich das nachstehende Leerzeichen zu Superview entfernen die Textansicht über die Ansicht erweitert, wenn der Text lang ist. – dcotter

1

Programmatically können Sie wie zu tun,

Objective C

- (void)textViewDidChange:(UITextView *)textView { 
    CGFloat fixedWidth = textView.frame.size.width; 
    CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)]; 
    CGRect newFrame = textView.frame; 
    newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height); 
    textView.frame = newFrame; 
} 

Swift

let fixedWidth = textView.frame.size.width 
textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude)) 
let newSize = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.greatestFiniteMagnitude)) 
var newFrame = textView.frame 
newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) 
textView.frame = newFrame; 
+0

Dies scheint nicht zu funktionieren. Vielleicht ist mein Zwang, es zu übersteuern? – dcotter

+0

Entfernen Sie die Contraint, dann versuchen Sie es. – User511

+0

Danke für die Hilfe Aisha. Ich habe es entfernt und es hat es einfach über seine Sichtweite hinaus erweitert. Aber ich habe es auf ein Label umgestellt und mit Hilfe einiger anderer Antworten funktioniert es. – dcotter

1

Statt UITextView eine benutzerdefinierte UILable Klasse machen und setzen Constraint wie ich in follwing Bild zeigen.

enter image description here

+0

Danke chetu. Du führst mich auf den richtigen Weg. Die Verwendung eines Labels scheint die richtige Wahl zu sein. – dcotter