Vous pouvez utiliser la collectionView:layout:insetForSectionAtIndex:
méthode pour votre UICollectionView
ou définir la sectionInset
propriété de l' UICollectionViewFlowLayout
objet attaché à votre UICollectionView
:
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section{
return UIEdgeInsetsMake(top, left, bottom, right);
}
ou
UICollectionViewFlowLayout *aFlowLayout = [[UICollectionViewFlowLayout alloc] init];
[aFlowLayout setSectionInset:UIEdgeInsetsMake(top, left, bottom, right)];
Mis à jour pour Swift 5
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 25, left: 15, bottom: 0, right: 5)
}
UICollectionViewDelegateFlowLayout
à votre liste de délégués ViewController pour utiliser la méthodeinsetForSectionAtIndex
Configuration des inserts dans Interface Builder comme indiqué dans la capture d'écran ci-dessous
Cela donnera quelque chose comme ceci:
la source
Pour ajouter un espacement sur l' ensemble
UICollectionView
:Pour jouer avec l'espacement entre les éléments d'une même ligne (colonne si vous faites défiler horizontalement), et leurs tailles:
la source
collection.collectionViewLayout
faut un casting comme dans l'exemple de @Pooja:UICollectionViewFlowLayout *flow = (UICollectionViewFlowLayout*) self.collectionViewLayout;
if let flow = collectionViewLayout as? UICollectionViewFlowLayout { flow.itemSize = CGSize(width: 100, height: 100) }
Swift 4
MODIFIER XCode 11.4 et swift 5
ne fonctionne pas. Utilisez ci-dessous fonctionne.
let flow = UICollectionViewFlowLayout()
la source
backgroundColor
ducollectionView
. Ou quelle que soit la vue superbe.Juste pour corriger certaines informations erronées dans cette page:
1- minimumInteritemSpacing : L'espacement minimum à utiliser entre les éléments de la même ligne.
La valeur par défaut: 10,0.
(Pour une grille à défilement vertical, cette valeur représente l'espacement minimum entre les éléments d'une même ligne.)
2- minimumLineSpacing : L'espacement minimum à utiliser entre les lignes d'éléments dans la grille.
Réf: http://developer.apple.com/library/ios/#documentation/uikit/reference/UICollectionViewFlowLayout_class/Reference/Reference.html
la source
Calcul de disposition automatique et rapide moderne
Bien que ce fil contienne déjà un tas de réponses utiles, je souhaite ajouter une version moderne de Swift , basée sur la réponse de William Hu. Cela améliore également deux choses:
Voici le code:
la source
itemsInOneLine
vaut 1, cela entraînera un NaN en raison de la division par zéro ici:itemsInOneLine / (itemsInOneLine - 1)
utiliser
setMinimumLineSpacing:
etsetMinimumInteritemSpacing:
sur leUICollectionViewFlowLayout
-Object.la source
Utilisation
collectionViewFlowLayout.sectionInset
oucollectionView:layout:insetForSectionAtIndex:
sont corrects.Cependant, si votre collectionView a plusieurs sections et que vous souhaitez ajouter une marge à l'ensemble de collectionView, je recommande d'utiliser le scrollView contentInset:
la source
Pour mettre de l'espace entre les
CollectionItem
s, utilisez ceciécrivez ces deux lignes dans viewdidload
la source
Définissez la
insetForSectionAt
propriété de l'UICollectionViewFlowLayout
objet attaché à votreUICollectionView
Assurez-vous d'ajouter ce protocole
Rapide
Objectif c
la source
En Objective-C
Tout ce que vous avez à faire est de modifier la valeur itemsPerRow et il mettra à jour le nombre d'éléments par ligne en conséquence. De plus, vous pouvez modifier la valeur d'espacement si vous souhaitez un espacement plus ou moins général.
la source
Pour ajouter des marges aux cellules spécifiées, vous pouvez utiliser cette disposition de flux personnalisée. https://github.com/voyages-sncf-technologies/VSCollectionViewCellInsetFlowLayout/
la source
Dans swift 4 et autoLayout, vous pouvez utiliser sectionInset comme ceci:
la source
Pour ajouter une séparation de 10 pixels entre chaque section, écrivez simplement ceci
la source
la source