2010-04-05 11 views
6

Par défaut, la propriété contentView de UITextView devient défilement lorsqu'il y a trop de texte pour tenir dans la vue en fonction de sa hauteur.UITextView modifier la hauteur au lieu de faire défiler

Je voudrais désactiver cela et à la place, mettre à jour la hauteur de l'UITextView pour l'adapter au texte. La raison pour laquelle je fais ceci est parce que j'ajoute l'UITextView comme subview d'un UIScrollView qui devrait manipuler le défilement, tout comme dans l'application Mail native (quand vous entrez le texte, toute la vue défile, pas seulement le textview .

Quelqu'un at-il des idées/a couru dans le même problème avant

Répondre

20

Il est tout simplement fait comme ceci:

CGRect frame = textView.frame; 

frame.size = textView.contentSize; 

textView.frame = frame; 

Ceci devrait s'adapter de façon appropriée la hauteur de la textview tous son contenu

+0

C'est génial. J'ai dû ajouter quelques petites choses que je posterai dans une nouvelle réponse à cause du formatage des commentaires. –

+0

Cela fonctionne très bien dans iOS5 mais pour une raison quelconque sur iOS4, le curseur continue de vouloir dériver en dehors des limites de la vue. –

+0

Merci l'homme, m'a sauvé beaucoup de temps! – Mateus

9

Peu de l changements ittle:

-(void)textViewDidChange:(UITextView *)textView { 

    CGFloat fontHeight = (textView.font.ascender - textView.font.descender) + 1; 

    CGRect newTextFrame = textView.frame; 
    newTextFrame.size = textView.contentSize; 
    newTextFrame.size.height = newTextFrame.size.height + fontHeight; 
    textView.frame = newTextFrame; 
} 

Ajout de la hauteur de la police donne place à la boîte de correction automatique lorsque vous épelez quelque chose de manière incorrecte.

Le UITextView devrait également être configuré pour ne pas faire défiler:

[aTextView setScrollEnabled:NO]; 
+0

Comment cela gère-t-il le défilement de la vue vers le curseur? –

+0

Ceci devrait être la réponse acceptée. –

+0

Vous pouvez également définir textView.clipsToBounds = NO; pour que la boîte d'autocorrection ne soit pas coupée. –

Questions connexes