Oui, st3fan a raison, la propriété contentSize de UIScrollView doit être définie. Mais vous ne devez pas désactiver la mise en page automatique à cette fin. Vous pouvez facilement configurer contentSize de UIScrollView avec mise en page automatique dans IB uniquement, sans aucun code.
Il est important de comprendre que lors de l'utilisation de la mise en page automatique contentSize de UIScrollView n'est pas défini directement, il est calculé en fonction des contraintes de toutes les sous-vues de UIScrollView. Et tout ce dont vous avez besoin est de fournir des contraintes appropriées pour les sous-vues dans les deux sens.
Par exemple, si vous n'avez qu'une seule sous-vue, vous pouvez définir sa hauteur et son espace de haut en bas pour superview (c'est-à-dire scrollView dans notre cas) contentSize.height est calculé comme somme
Vertical Space (aSubview.top to Superview.top) + aSubview.height + Vertical Space (aSubview.top to Superview.top)
contentSize.width est calculé de manière similaire à partir des contraintes horizontales.
S'il y a trop peu de contraintes pour calculer correctement contentSize, un petit bouton rouge est affiché près de l'élément View Controller Scene pour informer sur l'ambiguïté de la disposition.
S'il y a beaucoup de sous-vues, il peut s'agir d'une "chaîne" de contraintes: de haut en haut de la sous-vue, des hauteurs et des espaces entre les sous-vues et du bas de la sous-vue vers le bas comme dans la réponse de Danyal Aytekin .
Mais en pratique, dans la plupart des cas, il est plus pratique d'ajouter simplement une vue vide avec la taille requise et de définir les espaces en haut, à gauche, en bas, à droite de scrollView sur 0.
Vous pouvez utiliser cette vue comme "vue du contenu", c'est-à-dire mettre toutes les autres sous-vues dessus ou si vous avez déjà de nombreuses sous-vues et que vous ne voulez pas les déplacer et configurer à nouveau la mise en page, vous pouvez ajouter cette vue auxiliaire aux sous-vues existantes et la masquer.
Pour rendre scrollView scrollable, le contenu calculé doit être supérieur à la taille de scrollView.