Espacement des cellules dans UICollectionView
Comment puis-je définir l'espacement entre les cellules dans une section de UICollectionView
? Je sais qu'il y est une propriété minimumInteritemSpacing
j'ai mis à 5.0 encore l'espacement n'est pas apparaître 5.0. J'ai mis en œuvre la flowout méthode du délégué.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 5.0;
}
encore je ne suis pas d'obtenir le résultat souhaité. Je pense que c'est le minimum d'espacement . N'est-ce pas là un moyen par lequel je peux définir l'espacement maximal?
- u ne cocher que si elle est saisie de la méthode du délégué ou pas..? en mettant le point d'arrêt..
- oui, c'est entrer dans la délégué, IB aussi j'ai mis le min espacement des cellules à 5. Mais je ne crois pas un minimum d'espace est la propriété qui va m'aider comme il va juste assurez-vous que le minimum d'espace entre les cellules devraient être 5, mais si la vue de collection a plus de place , qu'elle n'utiliser que l'espace supplémentaire. Il devrait y avoir quelque chose comme maximum espacement entre les cellules
- J'ai le même problème. 5px semble ne pas fonctionner. Intresstingly je peux le faire avec un UITableView, mais pas avec un UICollectionView...
- J'ai résolu de faire quelques calculs..je vais poster tommorow.:)
- REMARQUE POUR 2016 c'est simple: stackoverflow.com/a/28327193/294884
Vous devez vous connecter pour publier un commentaire.
Je sais que le sujet est vieux, mais au cas où quelqu'un a encore besoin de réponse correcte ici ce dont vous avez besoin:
Ajouter de mise en œuvre de ce genre:
où maximumSpacing pourrait être fixé à une valeur que vous préférez. Cette astuce garantit que l'espace entre les cellules serait EXACTEMENT égale à maximumSpacing!!
mutableCopy
: vous n'êtes pas la mutation du contenu du tableau, mais la mutation de ses objets.if
ET une condition supplémentaire:if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width && currentLayoutAttributes.frame.origin.x > prevLayoutAttributes.frame.origin.x) {
if(originX + self.maximumInteritemSpacing + CGRectGetWidth(currentLayoutAttributes.frame) < self.collectionViewContentSize.width && CGRectGetMinX(currentLayoutAttributes.frame) - originX > self.maximumInteritemSpacing) {
Appui de la question initiale. J'ai essayé d'obtenir l'espacement 5px sur le
UICollectionView
mais cela ne fonctionne pas, aussi bien avec unUIEdgeInsetsMake(0,0,0,0)
...Sur un UITableView je peux le faire en spécifiant directement les coordonnées x,y dans une rangée...
Heres mon UICollectionView code:
Mise à jour: Résolu mon problème, avec le code suivant.
ViewController.m
À l'aide d'un flux horizontal layout, j'avais aussi une 10 points espacement entre les cellules. Pour supprimer l'espacement j'avais besoin de définir
minimumLineSpacing
ainsi queminimumInterItemSpacing
à zéro.Aussi, si toutes vos cellules sont de la même taille, c'est plus simple et plus efficace de définir la propriété sur le flux de mise en page directement au lieu d'utiliser délégué méthodes.
minimumInteritemSpacing
. Tout simplement la mise enminimumLineSpacing = 0
sur ma mise en page horizontale supprimé l'espacement horizontal entre les éléments.Souvenez-vous, c'est minimum d'espace, pas de minimum entre l'élément d'espacement ou de l'espace cellulaire. Parce que votre collectionView de la direction de défilement est HORIZONTALE.
Si c'était à la verticale, puis vous devez définir l'espace cellulaire ou inter élément de l'espace pour l'espace horizontal entre les cellules et l'espacement des lignes verticales de l'espace entre les cellules.
Objective-C version
Swift version:
Essayer ce code pour vous assurer d'avoir un espacement de 5px entre chaque élément:
Swift version de la réponse la plus populaire. L'espace entre les cellules vont être égal à
cellSpacing
.J'ai trouvé très moyen simple de configurer l'espacement entre les cellules ou lignes à l'aide de l'IB.
Il suffit de sélectionner UICollectionView du storyboard/Xib fichier et cliquez dans la Taille de l'Inspecteur comme indiqué dans l'image ci-dessous.
Pour la configuration de l'espace par programmation à utiliser les propriétés suivantes.
1) Pour le réglage de l'espace entre les lignes.
2) Pour le réglage de l'espace entre les éléments/cellules.
Veuillez noter le nom de la propriété minimumInterItemSpacing . Ce sera le espacement minimum entre les éléments n'est pas exactement le espacement. Si vous définissez minimumInterItemSpacing à une certaine valeur, vous pouvez assurer que l'espacement ne sera pas une valeur de moins. Mais il ya une chance d'obtenir une valeur plus élevée.
Fait l'espacement entre les éléments dépend de plusieurs facteurs itemSize et sectionInset. La collecte de vue dynamiquement placer le contenu sur la base de ces valeurs. Si vous ne pouvez pas assurer l'espacement exact. Vous devriez faire quelques essais et erreurs avec sectionInset et minimumInterItemSpacing.
Réponse pour Swift 3.0, Xcode 8
1.Assurez-vous de définir vue de collection délégué
2.Mettre en œuvre UICollectionViewDelegateFlowLayout protocole, pas UICollectionViewDelegate.
La voté répondre (et aussi le swift version) a un petit problème: il y aura un grand espacement sur la droite.
C'est parce que le flux de la mise en page est personnalisée pour faire de l'espacement entre les cellules exact, avec un flotteur gauche comportement.
Ma solution est de manipuler la section d'encart, de sorte que la section est de centrer, mais l'espacement est exactement comme indiqué.
Dans la capture d'écran ci-dessous, l'élément/l'espacement des lignes est exactement 8pt, tandis que la section de gauche & à droite encart sera plus grande que 8pt (pour le rendre de centre alignées):
Swift code:
let n = Int((containerWidth + minItemSpacing)/((itemWidth+minItemSpacing)))
Définir
UICollectionViewDelegateFlowLayout
protocole dans votre fichier d'en-tête.Mettre en œuvre après la méthode de
UICollectionViewDelegateFlowLayout
protocole comme ceci:Cliquez Ici voir la Documentation d'Apple de
UIEdgeInsetMake
méthode.Code Simple pour l'espacement
Je suis en utilisant monotouch, ainsi le nom et le code sera un peu différent, mais vous pouvez faire cela, assurez-vous que la largeur de la collectionview est égal à (x * largeur de la cellule) + (x-1) * MinimumSpacing avec x = nombre de cellules par ligne.
Juste faire les étapes suivantes en fonction de votre MinimumInteritemSpacing et la Largeur de la Cellule
1) Nous calculons le nombre d'éléments par ligne en fonction de la taille des cellules + courant encarts + espacement minimum
2) Maintenant, vous avez toutes les infos pour calculer l'espérance de la largeur de l'affichage de la collection
3) de Sorte que la différence entre la largeur et la largeur est
4) Maintenant régler les encarts (dans cet exemple, nous l'ajoutons à la droite, donc la position la plus à gauche de la collectionview reste le même
Je suis tombé sur un problème similaire, comme l'OP. Malheureusement, l'on a accepté la réponse n'a pas de travail pour moi, depuis le contenu de la
collectionView
ne serait pas centré correctement. Donc j'ai trouvé une autre solution qui ne nécessite que tous les éléments de lacollectionView
sont de la même largeur, ce qui semble être le cas dans la question:Que le code s'assurer que la valeur retournée par
...minimumInteritemSpacing...
sera exactement l'espacement entre chaquecollectionViewCell
et en outre garantir que toutes les cellules seront centrés dans lecollectionView
La solution ci-dessus par vojtech-vrbka est correct, mais il déclenche un avertissement:
Le code suivant devrait résoudre le problème:
Swift 3 Version
Il suffit de créer un UICollectionViewFlowLayout sous-classe et collez cette méthode.
Si tu veux ajuster l'espacement sans toucher taille de la cellule, c'est la solution qui fonctionne le mieux pour moi. #xcode 9 #tvOS11 #iOS11 #swift
Donc dans UICollectionViewDelegateFlowLayout, changement mettre en œuvre la prochaine méthodes, l'astuce est de u doivent utiliser les deux, et la documentation n'était pas vraiment de me pointer à penser dans cette direction. 😀
J'ai essayé iago849 de réponse et cela a fonctionné.
Swift 4
Voici le lien pour le projet github.
https://github.com/vishalwaka/MultiTags
Storyboard Approche
Sélectionnez CollectionView dans votre storyboard et aller à la taille de l'inspecteur et de définir min espacement entre les cellules et les lignes 5
Swift 5 Par Programme
J'ai une horizontale
UICollectionView
et sous-classéUICollectionViewFlowLayout
. L'affichage de la collection a de grandes cellules, et n'affiche qu'une seule ligne à la fois, et l'affichage de la collection s'adapte à la largeur de l'écran.J'ai essayé iago849 de réponse et cela a fonctionné, mais j'ai découvert que je n'avais pas besoin de sa réponse. Pour une raison quelconque, la définition de la
minimumInterItemSpacing
ne fait rien. L'espacement entre mes articles/les cellules peuvent être entièrement contrôlés parminimumLineSpacing
.Ne sais pas pourquoi cela fonctionne de cette façon, mais il fonctionne.
Les versions précédentes n'ont pas vraiment travailler avec les sections > 1. Donc ma solution a été trouvée ici https://codentrick.com/create-a-tag-flow-layout-with-uicollectionview/. Pour les paresseux:
J'ai un problème avec la accepté de répondre, j'ai donc mis à jour, c'est de travailler pour moi:
.h
.m
Ma solution dans
Swift 3
cellule de la ligne d'espacement, comme dans Instagram:Comment détecter l'appareil programmaticlly:
https://stackoverflow.com/a/26962452/6013170
Essayer de jouer avec cette méthode: