J'ai un UICollectionView
configuré avec un UICollectionViewDataSource
qui fournit actuellement six éléments. Ce sont moins que nécessaire pour remplir l'écran. Le problème est que ma vue de collection défile uniquement lorsqu'il y a suffisamment d'éléments pour remplir l'écran (testé avec 10, 20). Lorsque vous affichez moins d'éléments, il ne fait même pas cette animation de rebond que j'essaie d'obtenir, c'est juste fixe.
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateCollectionViewData) name:UIDocumentStateChangedNotification object:nil];
UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc]init];
flowLayout.itemSize = CGSizeMake(160, 100);
flowLayout.minimumInteritemSpacing = 0;
flowLayout.minimumLineSpacing = 0;
self.collectionView = [[UICollectionView alloc]initWithFrame:self.view.bounds collectionViewLayout:flowLayout];
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"Cell"];
self.collectionView.delegate = self;
self.collectionView.dataSource = self;
self.collectionView.bounces = YES;
[self.view addSubview:self.collectionView];
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return [self.collectionViewData count];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
Expense *expense = [self.collectionViewData objectAtIndex:indexPath.row];
UILabel *label = [[UILabel alloc]initWithFrame:cell.bounds];
label.text = expense.value;
label.backgroundColor = [UIColor clearColor];
label.font = [UIFont fontWithName:@"Miso-Bold" size:30];
label.textAlignment = NSTextAlignmentCenter;
[cell addSubview:label];
cell.backgroundColor = [UIColor colorWithRed:1 - (indexPath.row / 30.0f) green:0 blue:1 alpha:1];
return cell;
}
Merci de votre aide!
bounces
, malgré son nom, n'est pas la bonne propriété à définir. Vous devez également définir alwaysBounceVertical
et/ou alwaysBounceHorizontal
. De la documentation:
Si cette propriété est définie sur YES et que les rebonds sont YES, le glissement vertical est autorisé même si le contenu est plus petit que les limites de la vue de défilement . La valeur par défaut est NO.
Notez le nom déroutant dans IB .. https://stackoverflow.com/a/18391029/294884
Avec les storyboards dans l'inspecteur d'attributs pour la vue de collection, "Bounces" et "Bounces Vertically" doivent être cochés.
La définition de la hauteur de UICollectionView
à la taille de UIView
rendra votre problème de défilement désactivé. Si le UICollectionView
mesure 568 pixels de haut, il n'aura besoin de défiler que s'il contient plus de 568 pixels de contenu. Vous devez le définir à la hauteur de la vue dans laquelle il est contenu (identique à la largeur).
J'espère que cela vous aide.