2013-04-17 12 views
45

Ho un UICollectionView impostato con un UICollectionViewDataSource che attualmente fornisce sei elementi. Questi sono meno del necessario per riempire lo schermo. Il problema è che la mia vista raccolta scorre solo quando ci sono abbastanza elementi per riempire lo schermo (testato con 10, 20). Quando si visualizzano meno elementi, non si esegue nemmeno l'animazione di rimbalzo che sto cercando di ottenere, è solo corretta.UICollectionView non scorre

- (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; 
} 

Grazie per il vostro aiuto!

risposta

151

bounces, nonostante il nome, non è la proprietà giusta da impostare. È inoltre necessario impostare alwaysBounceVertical e/o alwaysBounceHorizontal. Dalla documentazione:

Se questa proprietà è impostata su YES e rimbalzi è sì, trascinamento verticale è consentita anche se il contenuto è più piccolo dei limiti della vista di scorrimento. Il valore predefinito è no.


Nota il nome di confusione in IB .. https://stackoverflow.com/a/18391029/294884

+0

Questa è la risposta corretta - OP deve accettare come risposta. –

+0

ottimo consiglio grazie – Fattie

+0

Grazie, funziona come un fascino :) – evya

4

Impostare l'altezza di UICollectionView su UIView renderà il problema di scorrimento disabilitato. Se lo UICollectionView è alto 568 pixel, sarà sempre necessario scorrere solo se contiene più di 568 pixel di contenuto. Dovresti impostarlo all'altezza della vista in cui è contenuto (uguale alla larghezza).

Spero che ti aiuti.

+0

aggiungendo un vincolo in IB per mantenere i bordi di UICollectionView uguali ai bordi della superview risolto il problema – Colin

9

Con storyboard in attributi ispettore per view collezione "rimbalza" e "rimbalzi in verticale" deve essere controllato.

Problemi correlati