J'ai passé deux jours à essayer les différentes solutions pour les approches de mise en page automatique mixte et pure pour réaliser ce qui était une configuration triviale de scrollview avant la mise en page automatique, et c'est maintenant officiel - je dois être trop stupide. Je mets cela en place principalement dans Storyboard (enfin, c'est juste comme ça).
Alors, voici mon appel à l'aide.
Viewtree:
UIView
-UIView
-UIView
..-UIScrollview
...-UIButton
...-UIButton
...-UIButton
Les boutons sont censés défiler horizontalement (de gauche à droite et vice versa). Quelqu'un peut-il s'il vous plaît me faire savoir comment définir les contraintes pour y parvenir en utilisant pure Autolayout ???
-
J'ai essayé l'approche mixte, comme ceci:
UIView
- UIView
- UIView
..-UIScrollview
...-UIView (contentview)
....-UIButton
....-UIButton
....-UIButton
... et définir des contraintes de largeur et de hauteur fixes pour le contentview
et les translatesAutoresizingMaskIntoConstraints
paramètres conformément à la note technique d'Apple. Les boutons et la vue de défilement sont configurés à l'aide de contraintes. Cela fait défiler la vue de défilement (yay) mais hélas, ça défile trop loin! Pour autant que je sache, la largeur du défilement est en quelque sorte doublée par rapport à ce que j'ai défini pour la vue de contenu ??? !!! ???
J'ai également essayé l'approche de mise en page automatique pure, avec contentview
et sans. Toutes les vues sont translatesAutoresizingMaskIntoConstraints=NO
, sauf pour self.view
. Les boutons ont des contraintes de largeur / hauteur fixes et sont épinglés aux quatre bords de la vue de défilement. Rien ne défile.
Je suis donc totalement perplexe de savoir pourquoi je ne peux pas le faire fonctionner correctement. Toute aide est très appréciée, et si vous avez besoin d'autres informations, veuillez demander!
Capture d'écran MISE À JOUR avec solution - contraintes buttonZ:
EDIT @ Jamie Forrest La solution s'avère donc être la mauvaise contrainte de fin sur le dernier bouton. Au lieu de 6441, la valeur que j'avais définie était négative, -6441. Le problème est que lors de la définition de la valeur dans le storyboard, il existe deux options dans la barre d'outils Épingler:
La valeur actuelle du canevas est négative (conduisant à aucun défilement) et l'option ci-dessous est positive (activation du défilement). Cela signifie que je ne suis pas stupide mais au moins à moitié aveugle je suppose. Cependant, pour ma défense, n'est-il pas quelque peu dérangeant que XCode n'affiche pas d'erreur pour le paramètre «incorrect»?
MODIFIE DE NOUVEAU Maintenant c'est drôle ... changer la valeur de fin de -6441 (pas de défilement) à 6441 défilement activé. Mais mon vieil ami le "too much contentsize" était de retour, conduisant à une taille de contenu deux fois plus grande que ce qu'elle devrait être! La solution pour obtenir le défilement de contenu correct était de définir la contrainte de fin sur ZERO! Ce n'est pas évident lorsque vous travaillez dans Storyboard, mais en regardant le code de @Infinity James, c'est ce qu'il devrait être.
contentSize
d'une UIScrollView
mise en page automatique uniquement. Et c'est le contentSize
qui définit combien vous pouvez faire défiler. Vous devrez donc éventuellement définir cela manuellement quelque part. Pour le reste, vous pouvez utiliser des contraintes de mise en page pour configurer les cadres de vue les uns par rapport aux autres.