web-dev-qa-db-fra.com

UITextView dans UIScrollView avec AutoLayout

J'essaie de placer UITextView dans UIScrollView avec AutoLayout sans succès. Ce que j'ai essayé, c'est

  • J'ai placé UIScrollView dans la vue principale de Storyboard
  • J'ai placé UITextView dans UIScrollView dans Storyboard et désactivé le défilement activé
  • Je définis des contraintes (début, fin, haut, bas) sur UIScrollView
  • Je fixe des contraintes (haut, début, fin, hauteur) sur UITextView
  • J'ai créé IBOutlet de la contrainte de hauteur de UITextView
  • J'ai défini un texte (beaucoup de texte pouvant causer le défilement) sur UITextView dans viewDidLoad ()
  • J'ai défini une contrainte de hauteur de UITextView avec le code ci-dessous. Je l'ai essayé juste après la définition du texte dans viewDidLoad () et viewDidLayoutSubviews () sans succès

self.textViewHeightConstraint.constant = [self.textView sizeThatFits:CGSizeMake(self.textView.frame.size.width, FLT_MAX)].height;

UITextView prend de la hauteur, mais pas UIScrollView. Y a-t-il quelque chose que j'ai manqué?

28
Sodbileg Gansukh

Il semble que cette question a une réponse qui a fonctionné pour un certain nombre de personnes. Cependant, il convient de noter que la documentation indique:

Placer une vue de texte à l'intérieur d'une vue de défilement. Les vues de texte gèrent leur propre défilement. Vous ne devez pas incorporer d'objets de vue de texte dans les vues de défilement. Si vous le faites, un comportement inattendu peut en résulter, car les événements tactiles des deux objets peuvent être mélangés et mal gérés.

Avant d'essayer de mettre une UITextView dans une UIScrollView, vous devez vous demander si cela est vraiment nécessaire. Si la vue de texte fait partie d'une présentation complexe dans la vue de défilement, notez l'utilisation du conteneur UIView dans la réponse acceptée.

Voir aussi: Défilement des vues à l'intérieur des vues de défilement

7
Suragch

Si vous avez remarqué que la mise en page automatique se plaint toujours de la hauteur de UIScrollView-

Le problème ici est que, par défaut, UITextView a coché la case «Scrolling Enabled» dans l'IB.

Alors trouvez cette case à cocher et décochez-la.

 enter image description here

1
Vitya Shurapov

J'ai un exemple concret de calcul de hauteur pour UITextView dynamic height + à l'intérieur de UIStackView qui se trouve à l'intérieur de UIScrollView ici: https://github.com/fassko/ScrollStackViewExample

1
Kristaps Grinbergs

La solution ci-dessus de Sodbileg fonctionne, mais vous n'avez pas besoin de toutes ses étapes. J'ai fait défiler ma vue défilement avec une vue texte à l'intérieur en suivant ses étapes jusqu'à l'étape 7. Pour l'étape 8, j'ai ajouté les 4 contraintes mais pas la hauteur (n'oubliez pas la contrainte du bas !!). Je n'ai pas fait le reste.

Je ne suis pas sûr, mais il semble que la hauteur de la vue texte s’ajuste automatiquement au lieu de devoir la modifier manuellement.

0
Noredeen Al-Zu'bi