web-dev-qa-db-fra.com

UICollectionView ne défile pas

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!

51
Dario

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

169
jrturton

Avec les storyboards dans l'inspecteur d'attributs pour la vue de collection, "Bounces" et "Bounces Vertically" doivent être cochés.

10
Vladimir Shutyuk

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.

4
Nishant Tyagi