2017-05-26 3 views
1

J'ai essayé d'atteindre cette conception pendant 3 jours mais tout ce que j'ai essayé a échoué. enter image description hereTaille dynamique UILabel à l'intérieur d'un UIScrollView

Voici comment ma mise en page est. La partie bleue est une vue UIScrollView avec 0 0 0 0 à la vue principale .

  • L'interface UIScrollView est imbriquée dans un UIView qui a tout mon contenu , également avec des contraintes 0 0 0 0 pour UIScrollView. J'ai aussi fait la largeur de UIView égale à la largeur de UIScrollView. J'ai ensuite ajouté des éléments de haut en bas. L'image était simple, 10 à la marge supérieure de la vue de contenu et la largeur et la hauteur fixes et centrées horizontalement dans le conteneur.
  • Le nom du profil est identique à l'image mais avec une hauteur fixe uniquement.
  • L'UIView qui contient les 3 étiquettes et 2 étiquettes de hauteur dynamique. J'ai donné à UIView les contraintes de haut, de gauche et de droite et j'ai laissé le bas pour que les étiquettes de hauteur dynamique puissent pousser la hauteur de la vue si nécessaire. Les UILabels ont 0 lignes définies.
  • 2ème contraintes UIView, 0 0 0 0 et 5 5 5 5 pour chaque étiquette à l'intérieur
  • UITableView à l'intérieur d'un UIView, la vue a une hauteur fixe et la table est également 0 0 0 0.
  • Le bouton 5 en haut, 5 à gauche, 5 à droite. J'ai ensuite fait le conteneur UIView (qui contient tous ces éléments) pour avoir un alignement avec le bord inférieur du bouton comme vu dans la réponse de ce poste: UIView with dynamic height multiple UILabel. J'ai également utilisé cette vidéo comme référence sur la façon d'implémenter un UIScrollView puisque c'était la première fois que je le faisais. https://www.youtube.com/watch?v=VE6DQGy4iS8

    Je ne suis pas autorisé à utiliser UIStackView bec nous ciblons iOS 8.

    Les 2 questions évidentes que j'ai droit sont maintenant:

    1. Quand je lance l'application, le défilement ne fait rien .
    2. Le seul avertissement que je reçois dans mon story-board est ceci: enter image description here
  • +0

    Je m'assurerais que tous vos uiview sont correctement contraints avec des goupilles supérieures et inférieures ou l'un ou l'autre avec une taille fixe. Plus précisément, vous devriez être en mesure d'épingler le bas de l'UIView contenant les étiquettes dynamiques au sommet de l'UIView suivant pour avoir un espacement fixe entre les deux tout en permettant la hauteur dynamique. – zfetters

    +0

    J'ai ces vues épinglées comme vous l'avez dit. Qu'est-ce qui détermine exactement la hauteur de la vue défilante? – Tarek

    +0

    Donc, vous avez d'abord UIView directement sous votre vue de défilement qui est épinglé 0,0,0,0. A l'intérieur c'est tout votre contenu, donc une fois que vous avez ajouté toutes les contraintes pour vous assurer que tout a sa largeur/hauteur expliquée pour votre parent, UIView augmentera réellement en taille si le contenu à l'intérieur augmente (en fonction de votre taille dynamique étiquettes) qui à son tour augmentera la taille de contenu de votre UIScrollView. La plus grande chose est que vous obtenez les contraintes sur votre contenu correct et vous devriez être bon à faire. – zfetters

    Répondre

    2

    D'accord, je réussi à le faire à la fin.

    Ce que j'ai fait, c'est que j'ai épinglé l'UIView qui a les UILabels dynamiques en haut, à droite et à gauche. Pour sa hauteur, je contrôle le glisser sur le dernier élément à l'intérieur de lui-même, ce qui est la deuxième hauteur dynamique UILabel sur la photo. J'ai contrôlé glisser et définir l'UIView et j'ai choisi "Bottom Spacing to Container" avec le UILabel qui a une hauteur dynamique. De cette façon, UILabel contrôle la hauteur finale de UIView dont UIScrollView avait besoin pour déterminer sa propre hauteur.

    De grossier chaque élément UILabel a été épinglé en haut à gauche seulement ce qui leur permet d'être tous dynamiques. Ce que vous faites avec les UIViews suivants (que vous souhaitiez leur donner une hauteur statique ou dynamique) est votre choix. Comme pour le UIButton en bas, j'ai fait la même chose avec ça.Je contrôle glissé de l'UIView contenant (qui est imbriqué dans l'UIScrollView et contient tout ici), à l'UIButton et j'ai choisi "l'espacement inférieur au récipient" et le réglons à 5. Cela permettra à la vue de contenir pour ajuster sa hauteur en fonction de où se trouve l'UIButton qui dépend de la distance parcourue quand les étiquettes dynamiques poussent la hauteur de leur vue et à son tour poussent le UIButton si cela a du sens. En résumé, dans un scénario typique, vous placez généralement le dernier élément de la vue dans la partie inférieure gauche et droite de la vue qui le contient. Cependant, pour permettre les changements dynamiques, vous inversez les 2 éléments de la contrainte.

    J'espère que cela a été utile.