2017-05-08 2 views
0

J'essaie de corriger ces contraintes dans mon storyboard. J'ai actuellement une vue conteneur qui a quelques contraintes et un positionnement qui fonctionne parfaitement. Il redimensionne en fonction de la taille de l'écran et autres. Cela fonctionne parfaitement.Contraintes iOS Storyboard ne fonctionnant pas comme prévu

Le contrôleur de vue qui est lié à cette vue conteneur est actuellement défini sur Freeform avec une largeur de 306 et une hauteur de 315. À l'intérieur de ce contrôleur de vue, j'ai une vue défilement avec les contraintes suivantes.

enter image description here

Il devrait prendre le contrôleur toute la vue. A l'intérieur de cette vue déroulante, j'ai beaucoup d'éléments, de boutons, de champs de texte, d'étiquettes, etc. Par exemple, j'ai un champ de texte épinglé en haut de la vue (Top Space to Superview 0). Si j'ai changé le contrôleur de vue de Freeform à Fixed, je m'attends à ce que la vue de défilement change de taille (ce qui est le cas), et je m'attends à ce qu'il règle la largeur de ce champ de texte a la même largeur que l'affichage et la vue de défilement (ce n'est pas le cas). Il maintient une largeur de 306. Même s'il est réglé à l'arrière et l'espace menant à superview mis à 0.

Cela crée des problèmes dans les appareils tels que l'iPhone 4S. Je veux que les éléments de cette vue soient rétrécis en termes de largeur pour tenir dans cette vue de conteneur. Mais à la place, il permet juste le défilement horizontal.

Je veux autoriser le défilement vertical puisque c'est un formulaire et il y a beaucoup d'éléments de forme et autres. Donc, pour les appareils plus petits, ils devraient pouvoir défiler vers le bas pour voir tous les éléments. Mais je veux que les éléments se rétrécissent ou s'ajustent en termes de largeur pour s'adapter aux appareils plus petits.

Des idées sur la façon d'y parvenir?

+1

Le contentSize d'une vue de défilement est définie par les contraintes appliquées à son contenu. Donc, si vous voulez que le * contenu * d'une vue de défilement change en fonction de la taille de la vue - par opposition à combien et dans quelle direction il peut défiler - vous devez configurer vos contraintes et/ou repositionner les * éléments de contenu * pour le faire . – DonMag

+0

@DonMag Je ne suis pas sûr de comprendre. Sur le champ de texte, j'ai 'l'espace de fin et de début à superview mis à 0'. Pouvez-vous donner plus de détails sur la façon de résoudre ce problème? Quelles contraintes dois-je ajouter ou modifier pour que cela fonctionne? Parce que je suis à peu près sûr que "trailing and leading space to superview" devrait fonctionner et ce n'est pas le cas, je ne comprends pas du tout. –

+0

Le champ de texte et les autres vues ne sont pas des enfants directs de 'UIScrollView' et ne sont pas contrôlés par sa taille. Ils sont les enfants de la vue du contenu qui se trouve à l'intérieur et "en dessous" de la scrollview. Leurs contraintes sont définies par rapport à cette vue de contenu et si vous voulez les redéfinir, vous devrez changer le contenu. Vous devrez également modifier la taille de contenu de la vue de défilement pour qu'elle corresponde aux limites de la nouvelle vue de contenu. –

Répondre

1

En supposant que votre mise en page ressemble à ceci:

enter image description here

Le ViewController plus petit, bleu clair est a un ScrollView épinglé à zéro tout autour.

Le Top étiquette gauche est épinglée au premier plan: 0 et Top: 0

L'étiquette En bas à droite est épinglée à Trailing: 0 et Bas: 0

Tous les 4 de ces contraintes sont liés à SuperView - signifiant le ScrollView.

Vous avez également besoin d'une contrainte de position Y pour l'étiquette en bas à droite - dans ce cas, je l'ai 435 "espacement vertical" de l'étiquette en haut à gauche.

À ce stade, tout fonctionne comme vous le voyez maintenant. Je l'ai installé dans Storyboard pour 7+ ... si je le lance sur 7+, il correspond exactement à l '"ouverture". Mais ... si je le lance sur 5s, l'étiquette en bas à droite se trouve sur la droite, et nous obtenons le défilement horizontal.

Pour corriger cela, vous devez ajouter une autre Contrainte de fin à l'étiquette en bas à droite, mais faites-le par rapport à la vue qui contient le ScrollView.

Ainsi, avec l'étiquette En bas à droite sélectionnée, vous devriez voir ceci:

enter image description here

+0

Je devrais ajouter ... cela semble être une structure maladroite. Si vous voulez un contenu défilant dans la zone "conteneur", je pense que ce serait plus facile à gérer si vous n'aviez qu'une vue défilante au lieu d'une vue conteneur. – DonMag

+0

Parfait !! On dirait que l'ajout de cet espace de fuite pour voir travaillé !! Merci de votre aide. La raison pour laquelle j'ai fait cette vue de conteneur est parce que j'ai des éléments au-dessous et au-dessus de la vue de défilement. C'est le moyen le plus simple d'envelopper ma tête. Normalement, je ne pose pas cette question, mais j'ai eu beaucoup de problèmes avec les mises en page et les storyboards ces derniers temps. Encore confus par certains d'entre eux. Si vous voulez jeter un oeil à mon autre question qui est assez similaire, mais dans un point de vue différent, ce serait le plus apprécié haha. http://stackoverflow.com/questions/43835290/ios-scroll-view-allows-scrolling-past-content –