212 votes

Espacement entre les cellules en UICollectionView

Comment définir espacement des cellules dans une section de UICollectionView ? Je sais il y a une propriété « minimumInteritemSpacing » je l’ai mis à 5.0 encore l’espacement n’apparaît pas 5.0. J’ai implémenté la méthode du délégué flowout.

STIL je ne reçois pas le résultat souhaité. Je pense que c’est l’espacement minimum. n’y a-t-il pas en quelque sorte par lequel je peux régler l’espacement maximal ?

simulator sc

197voto

jerik Points 1227

L'appui de la question initiale. J'ai essayé d'obtenir l'espacement 5px sur l' UICollectionView mais cela ne fonctionne pas, aussi bien avec un UIEdgeInsetsMake(0,0,0,0)...

Sur un UITableView je peux le faire en spécifiant directement les coordonnées x,y dans une rangée...

enter image description here

Heres mon UICollectionView code:

#pragma mark collection view cell layout / size
- (CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    return [self getCellSize:indexPath];  // will be w120xh100 or w190x100
    // if the width is higher, only one image will be shown in a line
}

#pragma mark collection view cell paddings
- (UIEdgeInsets)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(0, 0, 0, 0); // top, left, bottom, right
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {

    return 5.0;
}

Mise à jour: Résolu mon problème, avec le code suivant.

enter image description here

ViewController.m

#import "ViewController.h"
#import "MagazineCell.h" // created just the default class. 

static NSString * const cellID = @"cellID";

@interface ViewController ()

@end

@implementation ViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - Collection view
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
{
    return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
{
    return 30;
}

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
    MagazineCell *mCell = (MagazineCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];

    mCell.backgroundColor = [UIColor lightGrayColor];

    return mCell;
}

#pragma mark Collection view layout things
// Layout: Set cell size
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {

    NSLog(@"SETTING SIZE FOR ITEM AT INDEX %d", indexPath.row);
    CGSize mElementSize = CGSizeMake(104, 104);
    return mElementSize;
}
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
    return 2.0;
}

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section {
    return 2.0;
}

// Layout: Set Edges
- (UIEdgeInsets)collectionView:
(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
   // return UIEdgeInsetsMake(0,8,0,8);  // top, left, bottom, right
    return UIEdgeInsetsMake(0,0,0,0);  // top, left, bottom, right
}

@end

152voto

iago849 Points 285

Je sais que le sujet est vieux, mais dans le cas où quelqu'un doit encore bonne réponse ici ce que vous devez : 1. mise en page des standard fluide de substitution. 2. ajouter la mise en œuvre comme ça :

où maximumSpacing peut être affectée à n’importe quelle valeur que vous préférez. Cette astuce garantit que l’espace entre les cellules serait exactement égale à maximumSpacing !!

84voto

Jason Moore Points 2415

À l’aide d’un schéma de flux horizontal, je recevais également un espacement entre les cellules de 10 points. Pour supprimer l’espacement que j’avais besoin pour définir comme à zéro.

En outre, si toutes vos cellules ont la même taille, il est plus simple et plus efficace de définir la propriété sur la mise en page fluide directement au lieu d’à l’aide de méthodes du délégué.

37voto

LASoft Points 31

Essayez ce code pour vous assurer de qu'avoir un espacement de 5px entre chaque élément :

22voto

Anil Points 13977

Veuillez noter le nom de la propriété minimumInterItemSpacing . Ce sera l' espacement minimum entre les éléments n'est pas exactement l'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.

En 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X