Réglage UITextView image à la taille du contenu, ne fonctionne plus dans Xcode 5
L'extrait de code ci-dessous travaillé pour redimensionner une UITextView cadre du contenu de la hauteur, avant d'installer Xcode 5 mais il ne fonctionne pas depuis la mise à jour:
CGRect frame = _textView.frame;
frame.size.height = _textView.contentSize.height;
_textView.frame = frame;
J'ai cherché et n'ai pas trouvé la solution. Toutes les pensées?
OriginalL'auteur Silverstar | 2013-09-17
Vous devez vous connecter pour publier un commentaire.
Il y a de nouvelles choses pour cette sur iOS 7.
Pour obtenir le "intégrée" de la taille utilisée par l'affichage de texte après avoir mis à jour son texte, appel
usedRectForTextContainer:
sur le textView delayoutManager
de la propriété, en passant le textView detextContainer
propriété comme un argument.Mot d'avertissement à propos de défilement: sachez, cependant, que le changement de la taille de l'image d'un texte en vue après il a mis à jour c'est un texte peut avoir des visuels bugs si le défilement est désactivé sur votre affichage de texte. Si cela se produit, réglez le défilement est activé avant de modifier le texte de l'affichage de texte, puis de le désactiver après il est mis à jour (si vous avez besoin de défilement pour rester désactivé).
J'ai du mal avec cela, et ne pouvez pas le faire fonctionner, pouvez-vous fournir un exemple de code? Merci.
Un exemple de code serait utile. J'ai interprété votre réponse comme
[[textView layoutManager] usedRectForTextContainer:[textView textContainer]];
qui n'a pas de redimensionner le textView hauteur pour s'adapter au contenuNe fonctionne pas pour moi --
usedRectForTextContainer
retourne parfois un énorme grand nombre pour la hauteur, et parfois renvoie un nombre incorrect basé sur le contenu précédent de la textView (c'est à dire, ce que vous venez de remplacer avectextView.text = newString
).Je ne peux pas croire que c'est.. j'ai été vraiment du mal à comprendre pourquoi le textView n'était pas de retour de la taille correcte, donc comme vous l'avez suggéré, j'ai allumé le défilement... il a travaillé...
OriginalL'auteur jaredsinclair
De travailler dans iOS 7 (Xcode 5), il suffit de:
Donner tout l'espace pour recevoir le texte, en définissant:
[myTextView setScrollEnabled:YES];
Passer le texte réel:
myTextView.text = theTextVariable;
oumyTextView.text = @"The text...";
Autoresize textView:
[myTextView sizeToFit];
Désactiver le défilement:
[myTextView setScrollEnabled:NO];
P. S: myTextView peut être utiliser aussi comme soi-même.myTextView ou _myTextView
Et amusez-vous!
Ne fonctionne pas pour moi-je besoin pour utiliser
[textView layoutIfNeeded]
à la place (voir la réponse ci-dessous). Je suis vraiment perplexe pourquoi certaines personnes pensent que cela fonctionne et d'autres (pas seulement moi) n'ont pas.OriginalL'auteur Matheus Abreu
Je crois que la bonne façon de forcer un textView de mettre à jour son contentSize est en appelant
Cependant, dans iOS 7.0 et 7.1 cela semble toujours pas fonctionner de manière fiable, à moins que vous définissez d'abord
Il n'est pas clair pour moi si c'est un bug ou non, puisque je ne peux pas vraiment trouver une bonne explication de ce "non-contigus disposition" signifie.
(Mon cas d'utilisation est la mise à jour de
textView.text = newValue
par programme, alors essayez de redimensionner le textView de façon appropriée.)été la recherche de tous les jours - c'est la seule solution qui a fonctionné pour moi. je vous remercie.
allowsNonContiguousLayout est toujours la clé de la résolution du problème dans iOS 9! Merci
OriginalL'auteur c roald
Est ce que vous avez besoin.
Tout ce que vous devez faire est de vous assurer que:
AVANT de définir le UITextView contenu du texte.
Vous pouvez alors:
Après vous avez défini le texte. De même que l'écriture de votre propre bling de la fonction ou de l'emploi compliqué rect délimitation des méthodes. Pourquoi utiliser quelque chose d'aussi complexe lorsque la solution est aussi simple que de trois lignes?
Cela dit, enveloppez ces fonctions comme:
Et de définir dans un fichier ou d'un mondial, afin d'éviter d'avoir à écrire manuellement ou copiez/collez les lignes de quatre et de l'appeler à chaque fois. Juste l'appeler comme:
Si cela ne fonctionne pas:
Et vous serez d'or.
Je pense..
Que du Pseudo-code. Juste pour info.
Poster votre code, et je vais voir si je peux vous aider.
J'ai un
UITextView *commentTextView
et dans-viewWillAppear
- je mettre à jour le contenu à l'aide decommentTextView.text = commentStringForItem
. (J'ai parfois aussi le mettre à jour en réponse à une INTERFACE utilisateur d'action.) Ensuite, je veux redimensionner le champ afin qu'il montre autant de commentaires que possible, j'ai donc tenter de vérifiercommentTextView.contentSize
. Cette valeur est incorrecte (pas de mise à jour à partir de sa valeur précédente), à moins que j'ai d'abord appel[commentTextView layoutIfNeeded]
--sizeToFit
ne fonctionne pas.Suivant
sizeToFit
aveccommentTextView.scrollEnabled = false; commentTextView.scrollEnabled = true;
ne semble pas aider. (Je veux scrollEnabled sur mon domaine dans le cas général.) Aussi,sizeToFit
mess avec la largeur de mon domaine, lorsque je souhaite régler sa hauteur.Assurez-vous juste
.scrollEnabled
estTRUE
avant d'appelersizeToFit
et il devrait certainement mettre à jour en conséquence. N'hésitez pas à laisserscrollEnabled
ensemble deTRUE
. leFALSE
, y a des gens qui ne veulent pas il interagi avec.OriginalL'auteur topLayoutGuide
Une solution plus simple est de l'utiliser:
Ce travail pour moi.
OriginalL'auteur Javier Roberto