ScrollView, taille, etc

Bonjour à tous,

J’essaye de comprendre le fonctionnement des ScrollViews.
Et j’ai un peu de mal à saisir la taille automatique de celles-ci. J’avais espéré que ça soit plus ou moins automatisé. Mais ça ne semble pas être le cas, ou alors je loupe un truc…

Au début, pas de code, tout avec le Storyboard. Sans vrai succès. Ça affiche le contenu, ça « bounce » mais ça ne scroll pas vers le contenu qui est en dehors de l’écran.

Donc j’ai codé un petit truc, mais sans plus de succès.
Je vous joins l’état actuel du petit projet.

Si vous avez des pistes :slight_smile:

Merci.

Salut Yann,

Ce que tu peu faire c’est de changer la taille de ton viewController dans le storyboard (ceci n’aura aucun impact sur la taille de ton ecran). Pour sa tu doi séléctionnner ton viewController puis te rendre dans l’iinspecteur puis cliquer sur la petite règle, et dans la section “simulated size” tu met “freedom”. En suite tu a juste a ajuster la hauteur de ton viewcontroller afin que tout le contenue de la scrollView s’affiche. Quand tu va executer ton app tu vera que ta scrollview va scroller correctement. En suite a toi de mettre les contrainte adequat afin de maitriser ce qui est afficher a l’ecran.

1 « J'aime »

Salut Samir,

Alors je me suis peut-être mal exprimé. (ou alors j’ai mal compris/exploité ta réponse …)
En effet, ta solution me permet d’afficher tout mon controller dans le Storyboard. Ce qui va me faciliter la tâche par la suite.

Mon problème est mieux résumé dans le gif ci-dessous :wink:

Je vois que tu as aussi configurer ta scrolview directement depuis le code.

Essaye a tous hazard de comenté ce code et laisser le system ce debrouiller pour voir le résultat.

De fait, j’ai essayé de le forcer…

Mais enlever ce code n’a pas plus d’effets …

Je ne suis pas sur de bien saisir ton problème mais pour ma part, j’ai utiliser ce tuto :

Il est plutôt bien foutu.

Hello,

Merci pour ce tuto.
En effet, ça résout le problème dans ce cas précis.

Maintenant, le but du jeu était d’adapter automatiquement la hauteur de mon containerView à son contenu. Car je vais être amené à récupérer des blocs de texte d’un webservice et je ne peux donc pas fixer cette hauteur à l’avance.

C’est pourquoi j’avais une contrainte d’égalité de hauteur entre ma containerView et ma view principale (celle au dessus de la scrollView).

Je ne sais pas si c’est très clair ? :slight_smile:

SI ton contenue va changer pourquoi ne pas utiliser une tableview ? Tu pourrais crée des prototype Cell pour chaque type de donnée. Ton exemple est facilement faisable avec une tableview.

Oui j’y avais pensé. Mais je m’étais dit que c’était peut-être plus “propre” d’utiliser une scrollView plutôt qu’une tableView avec X cells custom. Non ?

Oh que non… tableView est beaucoup plus « propre ». Sous le capot, c’est une scrollView avec un mécanisme de gestion mémoire. Elle crée et détruit les cellules au fur et à mesure de la lecture, de manière optimisée. Alors qu’une scrollView a besoin que toutes ses vues soient affichées et stockées en mémoire pour fonctionner.

En théorie, tu peux créer un mécanisme pour gérer l’apparition et la disparition des vues en dehors de la zone affichée par la scrollView. Mais c’est refaire ce qui existe déjà dans une tableView, de manière moins optimisé, et avec les risques habituels de bug, bref une perte de temps et de ressources.

2 « J'aime »

D’accord !

Bon bah je vais partir sur des tableView alors :slight_smile:

Merci

Ou une collectionView, c’est pratiquement la même chose.

1 « J'aime »

Si ton contenu change, et que tu veux que ta scrollview s’adapte automatiquement à la hauteur.

Le plus simple, tu prends un UIViewController. (View 1)

Tu ajoutes une scrollview (View 2) (0, 0, 0, 0) “décoche constraint to margin” dans View 1
Tu ajoutes une view (View 3) (0, 0, 0, 0) dans la scrollview (View 2) "décoche constraint to margin"
Tu lies la view (View 3) que tu viens d’ajouter à ta view (View 1) principale (celle qui se trouve au dessus de ta scrollview (View 2)) et tu mets. Equal Width et Equal Height

Pour lier, si jamais tu ne sais pas comment faire tu gardes la touche Control enfoncé.

Ensuite tu vas sur la contrainte de Hauteur que tu viens de créer (Height) et tu change la priorité qui est de 1000 à low (250)

Tu ajoutes toutes tes views et elements dans la VIEW 2 qui se trouve dans la scrollview.
Là tu fais ton basic layout et tes contraintes.

Juste le dernier element tout en bas quand tu mets la contrainte vers “Bottom” tu l’édites ensuite et tu mets “Supérieur ou égal” et tu choisis une valeur en général je mets 20 enfin ça dépend de où doit se trouver ton dernier élément =)

Si jamais tu n’y arrives pas… tiens moi au courant… Si j’ai un peu de temps je ferais des images…

++

1 « J'aime »

Hello @venux92 !

Merci de ta réponse, au final je suis parti sur une TableView avec des custom cells.
Mais je note ta technique et si j’ai besoin d’y revenir, je l’utiliserai :slight_smile: