J'utilise un UICollectionView avec une largeur de cellule de 67, en ce moment j'utilise une disposition de flux.
J'ai 3 cellules d'affilée avec un espace de 30 pixels entre les cellules. Comment réduire cette distance afin de pouvoir tenir quatre cellules d'affilée? Cette méthode a-t-elle quelque chose à voir avec cela?
- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
{
return UIEdgeInsetsMake(10, 10, 10, 10);
}
Cette méthode UICollectionViewFlowLayoutDelegate
vous aidera ..
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionView *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
{
return 10; // This is the minimum inter item spacing, can be more
}
Un de plus si vous avez besoin de plus d'espace pour organiser vos cellules, ajustez également edgeInsets
Vous pouvez configurer l'espacement entre les cellules ou les lignes à l'aide des propriétés suivantes.
1) Pour définir l'espace entre les lignes.
[self.collectionView setMinimumLineSpacing:5];
2) Pour définir l'espace entre les éléments/cellules.
[self.collectionView setMinimumInteritemSpacing:5];
Vous pouvez également le configurer à partir d'InterfaceBuilder (IB). Sélectionnez simplement UICollectionView dans le fichier storyboard/Xib et cliquez sur Inspecteur de taille comme spécifié dans l'image ci-dessous.
De ceci . Vous devez modifier minimumInteritemSpacing et minimumLineSpacing .
UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init];
flow.itemSize = CGSizeMake(cellWidth, cellHeight);
flow.scrollDirection = UICollectionViewScrollDirectionHorizontal;
flow.minimumInteritemSpacing = 0;
flow.minimumLineSpacing = 0;
mainCollectionView.collectionViewLayout = flow;
Non, non. Modifiez simplement le minimumInteritemSpacing
de la mise en page.
Vous pouvez utiliser la méthode déléguée comme: - pour changer l'espace entre les cellules d'une section.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionView *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
Pour afficher le remplissage en haut et en bas entre les cellules de différentes sections.
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
// Disposition: définir les bords // définir des encarts pour la cellule
- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
//top,left,botttom,right
Swift 3.
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
if DEVICE_IDIOM == .pad {
return 15.0
}
else {
return 10.0
}
}
J'ai eu le même problème..
Dans mon cas, j'avais besoin d'une cellule rétangulaire.
Pour obtenir le résultat souhaité, j'ai utilisé le ICollectionViewDelegateFlowLayout.
Ceci est ma mise en œuvre de l'une des méthodes:
- (CGSize)collectionView:(UICollectionView *)collectionView
layout:(UICollectionViewLayout*)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
{
CGFloat width = CGRectGetWidth(self.view.frame)/3.0f;
return CGSizeMake(width, (width * 1.1f));
}
CA marchait bien pour moi! J'espère que ça aide quelqu'un.
Swift 4.2
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 10
}
func collectionView(_ collectionView: UICollectionView, layout
collectionViewLayout: UICollectionViewLayout,
minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 10
}