7
votes

Contrainte manquante X et Hauteur à UiscrollView en Autolayout

Disclaimer: J'ai vu une technique tellement qui inclut l'ajout d'un UIView (être appelé ContentView) à l'UISCrollView et de tout mettre dans ce contenuView. Je ne veux pas utiliser cette technique comme je voudrais comprendre em> strong> pourquoi je suis le problème actuel.

J'ai un UIVollview sur l'uIView par défaut d'un UIViewController, Son Uiscrollview a 4 contraintes: une de chaque côté (traînant, haut, menant, en bas) afin qu'il glisse à son parent l'uIView. cela fonctionne! strong> p>

 Contraintes UiscrollViews de fonctionnement P>

Mais quand je veux ajouter un uiImageView à l'Uiscrollview et je le veux Pour être collé à ses côtés parent (traînant, haut, leader) + une hauteur spécifique, maintenant j'ai un problème. p>

 sans fonctionnement UIImageView Contraintes P>

Il dit: P>

Scroll View: Has ambiguous scrollable height
Scroll View: Needs constraints for: X position or width


0 commentaires

3 Réponses :


8
votes

La raison pour laquelle Xcode jette ces erreurs est parce qu'elle ne peut pas calculer uiscrollview et UIImageView cadre dans l'exécution.

Lorsque vous ajoutez une contrainte pour uiscrollview liée à son superview, il indique à Xcode de dessiner la vue de défilement aussi gros que son superview. Toutefois, lorsque vous ajoutez une contrainte pour uiImageView liée à UiscrollView Taille, il indique à XCode de dessiner la vue d'image aussi gros que Uiscrollview Taille du contenu. Veuillez noter que uiscrollview taille et taille du contenu est deux choses différentes.

Si nous y pensons comme une maison, la taille de la vue de défilement est essentiellement la taille de la fenêtre, c'est une taille que vous pouvez utiliser pour voir l'intérieur de la maison. Et la taille du contenu est la taille de la maison. C'est pourquoi il n'y a pas de relation entre la taille de la vue de défilement et la taille du contenu de la vue.

Vous pouvez corriger votre problème de deux manières, d'abord en définissant la taille du contenu de la vue de défilement de manière programmatique ou en utilisant IB. Bien que, je ne sais pas si la réglage de la réglage de manière programmatique fera taire l'avertissement. Vous pouvez la définir à IB en suivant la réponse ici . Deuxièmes manières impliquant d'ajouter plus de contrainte à votre uiImageView . En ajoutant une contrainte de fond et une contrainte de largeur, Xcode peut calculer UiscrollView Taille du contenu qui supprimera cet avertissement.


1 commentaires

Merci! J'ai essayé la première option (le lien), il ne pouvait pas faire taire l'avertissement: / l'astuce avec l'ajout d'un UIView (contentview) à la vision de ScrollView et tout faire dans l'UIView semble être l'option la plus facile (et future si j'ajoute des trucs. dans la vue).



3
votes

Pour résoudre ce problème, j'ai fait la chose suivante: 1. Inséré une enveloppe de défilement. A donné des contraintes à superview de toutes les directions 2. Inside ScrollView, j'ai ajouté un autre uIView.then, j'ai ajouté des contraintes similaires à SuperView de toutes les directions à UIView. En plus de cela, je lui ai donné une alignement vertical du centre et un alignement horizontalement central. Cela a supprimé les erreurs de contraintes.


0 commentaires

0
votes

Cela a fonctionné pour moi.

Passez ce qui suit dans votre Storyborad

  • Ajoutez une vue cachée de hauteur placée à 0,0 dans votre enveloppe ScrollView.
  • Ajouter des contraintes à la vue cachée, top = 0, gauche = 0, droite = 0, bas = 0.
  • Ajoutez la contrainte sur cette vue cachée pour le rendre centre aling horizontalement à la vue de défilement.

    Cela devrait prendre en charge la vision de ScrollView se plaindre de la position X.


0 commentaires