Comment définir l'espacement des cellules dans une section de UICollectionView
? Je sais qu'il existe une propriété que minimumInteritemSpacing
je l'ai définie sur 5.0, mais l'espacement n'apparaît pas 5.0. J'ai implémenté la méthode déléguée flowout.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 5.0;
}
je n'obtiens toujours pas le résultat souhaité. Je pense que c'est l'espacement minimum. N'y a-t-il aucun moyen de définir l'espacement maximal?
ios
objective-c
uicollectionview
Vishal Singh
la source
la source
Réponses:
Je sais que le sujet est ancien, mais au cas où quelqu'un aurait encore besoin d'une réponse correcte, voici ce dont vous avez besoin:
Ajoutez une implémentation comme celle-ci:
où maximumSpacing peut être défini sur n'importe quelle valeur que vous préférez. Cette astuce garantit que l'espace entre les cellules serait EXACTEMENT égal à maximumSpacing !!
la source
mutableCopy
: vous ne mutez pas le contenu du tableau, mais mutez les objets qu'il contient.if
en ET une condition supplémentaire:if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width && currentLayoutAttributes.frame.origin.x > prevLayoutAttributes.frame.origin.x) {
Soutenir 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 ...
Voici mon code UICollectionView:
Mise à jour: résolu mon problème, avec le code suivant.
ViewController.m
la source
En utilisant une disposition de flux horizontal, j'obtenais également un espacement de 10 points entre les cellules. Pour supprimer l'espacement, je devais régler
minimumLineSpacing
ainsi queminimumInterItemSpacing
zéro.De plus, si toutes vos cellules ont la même taille, il est plus simple et plus efficace de définir directement la propriété sur la disposition du flux au lieu d'utiliser des méthodes déléguées.
la source
minimumInteritemSpacing
. Le simple fait de définirminimumLineSpacing = 0
ma disposition horizontale a supprimé l'espacement horizontal entre les éléments.N'oubliez pas qu'il s'agit d' un espace de ligne minimal , et non pas d'un espacement minimal entre les éléments ou d'un espace de cellule. Parce que le sens de défilement de votre collectionView est HORIZONTAL .
S'il est vertical, vous devez définir l'espace des cellules ou l'espace inter-éléments pour l'espace horizontal entre les cellules et l'espacement des lignes pour l'espace vertical entre les cellules.
Version Objective-C
Version Swift:
la source
Essayez ce code pour vous assurer d'avoir un espacement de 5 pixels entre chaque élément:
la source
Version Swift de la réponse la plus populaire. L'espace entre les cellules sera égal à
cellSpacing
.la source
J'ai trouvé un moyen très simple de configurer l'espacement entre les cellules ou les lignes en utilisant IB.
Sélectionnez simplement UICollectionView dans le fichier storyboard / Xib et cliquez dans l' inspecteur de taille comme spécifié dans l'image ci-dessous.
Pour configurer l'espace par programme, utilisez les propriétés suivantes.
1) Pour définir l'espace entre les rangées.
2) Pour définir l'espace entre les éléments / cellules.
la source
Veuillez noter le nom de la propriété minimumInterItemSpacing . Ce sera l' espacement minimum entre les articles et non l' espacement exact . Si vous définissez minimumInterItemSpacing sur une certaine valeur, vous pouvez vous assurer que l'espacement ne sera pas une valeur inférieure à cela. Mais il y a une chance d'obtenir une valeur plus élevée.
En fait, l'espacement entre les éléments dépend de plusieurs facteurs itemSize et sectionInset . La vue de collection place dynamiquement le contenu en fonction de ces valeurs. Vous ne pouvez donc pas garantir l'espacement exact. Vous devriez faire quelques essais et erreurs avec sectionInset et minimumInterItemSpacing .
la source
Réponse pour Swift 3.0, Xcode 8
1.Assurez-vous de définir délégué de vue de collection
2.Implémentez le protocole UICollectionViewDelegateFlowLayout , pas UICollectionViewDelegate.
la source
Code simple pour l'espacement
la source
La réponse votée (et aussi la version rapide ) a un petit problème: il y aura un grand espacement à droite.
En effet, la disposition du flux est personnalisée pour rendre l'espacement des cellules exact, avec un comportement flottant à gauche .
Ma solution consiste à manipuler l'encart de section, de sorte que la section soit alignée au centre, mais que l'espacement soit exactement comme spécifié.
Dans la capture d'écran ci-dessous, l'espacement des éléments / lignes est exactement de 8 points, tandis que l'encart de section gauche et droite sera plus grand que 8 points (pour le rendre aligné au centre):
Code Swift en tant que tel:
la source
let n = Int((containerWidth + minItemSpacing)/((itemWidth+minItemSpacing)))
Définissez le
UICollectionViewDelegateFlowLayout
protocole dans votre fichier d'en-tête.Implémentez la méthode de
UICollectionViewDelegateFlowLayout
protocole suivante comme celle-ci:Cliquez ici pour voir la documentation Apple de la
UIEdgeInsetMake
méthode.la source
Approche du storyboard
Sélectionnez CollectionView dans votre storyboard et accédez à l'inspecteur de taille et définissez l'espacement minimum pour les cellules et les lignes sur 5
Swift 5 par programme
la source
Si vous souhaitez modifier l'espacement sans toucher à la taille réelle des cellules, c'est la solution qui a le mieux fonctionné pour moi. #xcode 9 # tvOS11 # iOS11 #swift
Donc, dans UICollectionViewDelegateFlowLayout , changez d'implémenter les méthodes suivantes, l'astuce est que vous devez utiliser les deux, et la documentation ne m'indiquait pas vraiment de penser dans cette direction. :RÉ
la source
J'utilise monotouch, donc les noms et le code seront un peu différents, mais vous pouvez le faire en vous assurant que la largeur de la collectionview est égale à (x * largeur de cellule) + (x-1) * MinimumSpacing avec x = montant de cellules par ligne.
Il suffit de suivre les étapes suivantes en fonction de votre espacement minimum entre les éléments et de la largeur de la cellule
1) Nous calculons le nombre d'articles par ligne en fonction de la taille des cellules + des encarts actuels + de l'espacement minimum
2) Vous avez maintenant toutes les informations pour calculer la largeur attendue pour la vue de collection
3) La différence entre la largeur actuelle et la largeur attendue est donc
4) Maintenant, ajustez les encarts (dans cet exemple, nous l'ajoutons à droite, de sorte que la position gauche de la vue de la collection reste la même)
la source
J'ai un horizontal
UICollectionView
et sous-classéUICollectionViewFlowLayout
. La vue de collection comporte de grandes cellules et n'en affiche qu'une seule à la fois, et la vue de collection s'adapte à la largeur de l'écran.J'ai essayé la réponse d'iago849 et cela a fonctionné, mais j'ai découvert que je n'avais même pas besoin de sa réponse. Pour une raison quelconque, la définition de
minimumInterItemSpacing
ne fait rien. L'espacement entre mes éléments / cellules peut être entièrement contrôlé parminimumLineSpacing
.Je ne sais pas pourquoi cela fonctionne de cette façon, mais cela fonctionne.
la source
Je suis tombé sur un problème similaire à OP. Malheureusement, la réponse acceptée n'a pas fonctionné pour moi car le contenu de la
collectionView
ne serait pas centré correctement. Par conséquent, j'ai trouvé une solution différente qui nécessite uniquement que tous les éléments ducollectionView
soient de la même largeur , ce qui semble être le cas dans la question:Ce code garantira que la valeur renvoyée par
...minimumInteritemSpacing...
sera l'espacement exact entre chaquecollectionViewCell
et en outre garantira que les cellules toutes ensemble seront centrées dans lecollectionView
la source
La solution ci-dessus de vojtech-vrbka est correcte mais elle déclenche un avertissement:
Le code suivant devrait le corriger:
la source
Version Swift 3
Créez simplement une sous-classe UICollectionViewFlowLayout et collez cette méthode.
la source
J'ai essayé la réponse d'iago849 et cela a fonctionné.
Swift 4
Voici le lien pour le projet github. https://github.com/vishalwaka/MultiTags
la source
Les versions précédentes ne fonctionnaient pas vraiment 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:
la source
J'ai un problème avec la réponse acceptée, donc je l'ai mise à jour, cela fonctionne pour moi:
.h
.m
la source
Ma solution dans
Swift 3
l'espacement des lignées cellulaires comme sur Instagram:Comment détecter un appareil par programmation: https://stackoverflow.com/a/26962452/6013170
la source
Eh bien, si vous créez une vue de collection horizontale, pour donner de l'espace entre les cellules, vous devez définir la propriété
minimumLineSpacing
.la source
Essayez de jouer avec cette méthode:
la source