2010-01-27 23 views
11

Ich habe bereits mehrere Suchen auf Stack Overflow und Google, aber ich konnte keine Lösung für mein Problem finden.Autoresize UITextView und UIScrollView

Ich habe eine Detailansicht für ein Produkt, das eine UIScrollView und einige Unteransichten (UIImageView, UILabel, UITextView) enthält. Sie können ein Beispiel here finden.

Zuerst möchte ich die UITextView (nicht den Text selbst!) Auf die entsprechende Höhe autoresize. Dann möchte ich den gesamten UIScrollView so autorisieren, dass er der Höhe meines UITextView und den darüber liegenden Elementen entspricht. Ich habe den folgenden Code versucht:

myUITextView.frame = CGRectMake(2.0, 98.0, 316.0, self.view.bounds.size.height); 

[scrollView setContentOffset:CGPointMake(0.0, 0.0) animated:NO]; 
scrollView.contentSize = CGSizeMake(320.0, 98.0 + [myUITextView frame].size.height); 

[self.view addSubview:scrollView]; 

98,0 + [myUITextView Rahmen] .size.height) weil mein Gedanke war: Nach der Höhe myUITextView bekommen, fügen Sie die Höhe der anderen Subviews (98,0) zu ihm.

Leider funktioniert es nicht sehr gut. Je nach Inhalt des UIScrollView ist es zu kurz oder zu lang. Ich habe mit dem Ergebnis, einige Protokollierung, dass die Höhe des UITextView ist immer das gleiche:

2010-01-27 14: 15: 45,096 myApp [1362: 207] [myUITextView frame] .size.height: 367,000000

Vielen Dank!

Antwort

0

Ein UITextView passt sich nicht automatisch an seinen Inhalt an (nicht so weit ich weiß), daher müssen Sie die Größe des Textes selbst bestimmen und die UIView entsprechend dimensionieren.

Die Funktionen auf this page helfen - sie nutzen zu können die Breite und Höhe eines Strings, so etwas wie

// Get the size that the string will render at 
NSString *contents = @"This is the content of your UITextView"; 
CGSize areaSize = [contents sizeWithFont:myView.font forWidth:myView.frame.size.width lineBreakMode:UILineBreakModeWordWrap]; 

// Then set the frame of your UITextView to be the right size 
myView.bounds = CGRectMake(0, 0, areaSize.width, areaSize.height); 

Dann bekommen Sie die anderen Komponenten drum herum Layout kann.

hoffte, das hilft,

S

PS Warnung, ist der Link zu der Dokumentation korrekt, aber mein Code-Beispiel ist nicht getestet, sorry :)

+0

Danke für Ihre Hilfe. Es scheint sizeWithFont: forWidth: lineBreakMode: funktioniert nur für eine einzelne Textzeile. Ich habe sizeWithFont versucht: constrainedToSize: lineBreakMode: und es funktioniert irgendwie. Manchmal berechnet es nicht die richtige Höhe. Ich denke, es liegt an einigen Zeilenumbrüchen in meiner Textquelle, also habe ich 30 px zum Button hinzugefügt. – dennis3484

+0

Ich habe gerade die Dokumente überprüft und Sie haben absolut Recht, Entschuldigung! Ich habe Probleme damit gehabt, manchmal auch die falsche Höhe zurückzugeben und ich habe genau die selbe Lösung benutzt wie du - addiere 30px :) – deanWombourne

22

Es ist eigentlich eine sehr einfache Art und Weise zu tun Ändern Sie die Größe des UITextView auf seine korrekte Höhe mit seiner contentSize.

CGRect frame = _textView.frame; 
frame.size.height = _textView.contentSize.height; 
_textView.frame = frame; 

Eine Sache zu beachten ist, dass die richtige Content ist nur nach die UITextView mit addSubview zu der Ansicht hinzugefügt wurden. Zuvor ist es gleich frame.size

+0

funktioniert wie ein Zauber – Krystian