web-dev-qa-db-fra.com

Xcode Interface Builder 9.1 Collection View Les cellules ont une "hauteur attendue" trop petite

Récemment, j'ai rencontré un problème avec Interface Builder que je n'ai pas résolu. J'utilise UICollectionViewController et chaque fois que j'ajoute une cellule, elle affiche immédiatement un rectangle orange (indiquant une mise à jour automatique de la mise en page). La mise à jour du cadre/de la cellule ne change rien. L'avertissement associé au marquage orange indique "Attendu: hauteur = Y, réel: hauteur = X" où Y est toujours exactement X-100. C’est-à-dire que lorsque j’ai défini une hauteur de cellule personnalisée de 193, le message "Attendu: hauteur = 93". Cela se produit quelle que soit la taille dans laquelle j'entre.

Le problème, c’est que j’ai beaucoup de difficultés avec les vues secondaires et leurs contraintes. Par exemple, si j'ajoute une sous-vue avec la contrainte pour conserver la même hauteur que la cellule, elle sera affichée sous la forme 93 (la hauteur attendue), même si ma cellule doit avoir la taille 193. La mise en page devient impossible.

J'ai essayé d'ajouter une nouvelle cellule, même problème. J'ai essayé de supprimer chaque sous-vue et de les rajouter, rien.

Toutes les idées sont les bienvenues.

Merci beaucoup!

14
Dr. Cashberg

Je ne sais pas si cela a résolu le problème, mais l'avertissement et le problème ont disparu une fois les actions suivantes accomplies:

Sélectionnez CollectionViewController dans Interface Builder et définissez la taille sur forme libre et augmentez la hauteur suffisamment pour afficher toutes les cellules de votre modèle. (Plus: peut-être rafraîchir les vues). Cela a résolu le problème pour moi.

8
Dr. Cashberg

Solution trouvée! (Xcode 9.2)

Le bogue semble ne se produire que lorsque vous essayez d'incorporer la UICollectionViewController dans un Container View dans le storyboard. La solution consiste à supprimer la séquence pendant que vous définissez vos contraintes et à ajouter de nouveau la séquence une fois que vos contraintes sont bien définies.

Je pense également que définir UICollectionViewController size comme Freeform pourrait être responsable du bogue. Si c'est le cas, essayez de définir des contraintes avant de modifier la taille.

J'espère que cela t'aides !

10
AnthoPak

Dans mon cas, j'ai ajouté deux cellules de vue de collection, avec le contrôleur de vue de collection. Définir uniquement le contrôleur de vue sur une forme libre ne nous aidera pas. Besoin de mettre à jour la taille, pour se débarrasser de l'avertissement.

la mise à jour des cadres de cellules de vue de collection ne nous aidera pas. Warning changera continuellement sa longueur.

 Get rid of story board warning

J'ai essayé de travailler sans tenir compte de l'avertissement, car j'ai défini la taille de cellule de ma vue de collection par programme et cela fonctionne comme prévu.

1
Sujananth

Je pense que c'est juste un bogue étrange lorsque je supprime la collectionViewController dans SB, puis en crée un nouveau, le problème disparaît

1
Jiang Lun

C'est un bogue courant avec Interface Builder. Je ne connais pas la cause exacte, mais je pense que cela a quelque chose à voir avec le placement de vues de collection dans des vues de montage qui n'ont pas une taille exacte. Je l'ai vu en les plaçant dans des vues de défilement, des vues de pile et des vues de conteneur.

Il existe une solution simple, même si j’estime qu’il s’agit d’un bogue dans IB qui devrait être corrigé par Apple au lieu de le pirater. La solution (pour moi du moins - votre kilométrage peut varier!) Consiste à placer la vue de la collection dans une variable UIView ordinaire et à épingler ses bords, puis à placer la vue parent dans la position dans laquelle vous souhaitez afficher votre collection, avec toutes les contraintes qu'elle contient. Champs obligatoires.

J'ai généralement constaté qu'il n'y avait en réalité aucun problème de mise en page automatique au moment de l'exécution, c'est pourquoi je pense qu'il s'agit d'un simple bogue d'Interface Builder.

0
Ash