2015-03-10 17 views
5

A causa di alcuni scopi (come tirare per aggiornare), ho bisogno di un UICollectionView può rimbalzare o scorrere quando non ci sono le cellule - significa numberOfItemsInSection: ritorno 0Abilita rimbalzo/scorrere per UICollectionView mentre non le cellule

ho il mio codice In questo modo:

... 
     UICollectionViewFlowLayout *flowLayout =[[UICollectionViewFlowLayout alloc] init]; 
     flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical; 
     flowLayout.minimumInteritemSpacing = SPLIT_SPACE; 
     flowLayout.minimumLineSpacing = SPLIT_SPACE; 
     targetCollection = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height - TABBAR_HEIGHT) 
                collectionViewLayout:flowLayout]; 
     [targetCollection registerNib:[UINib nibWithNibName:@"DashboardCell" bundle:[NSBundle mainBundle]] forCellWithReuseIdentifier:@"DashboardCell"]; 

     targetCollection.autoresizingMask = UIViewAutoresizingFlexibleHeight; 
     targetCollection.backgroundColor = [UIColor colorWithHex:@"#EAEAEA"]; 
     targetCollection.contentInset = UIEdgeInsetsMake(0, 0, 20, 0); 
     targetCollection.alwaysBounceVertical = YES; 
... 
    #pragma mark - UICollectionViewDataSource 
    - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section; 
    { 
     return 0; 
    } 

Tuttavia, durante il test, questo UICollectionView vuoto non può rimbalzare né scorrere. Sospetto che sia correlato alla cella vuota, ma devo abilitare il rimbalzo o scorrere quando non ci sono celle. Questo è simile ad un altro del mio problema: SVPullToRefresh cannot pull on an empty UICollectionView

+0

Il motivo di questo successo è contentSize del vostro ScrollView è inferiore a frameSize.You del ScrollView può impostare contentSize più grande della framesize se inizializzato o ricaricare. – Suen

+0

Ho provato 'collectionView.contentSize = CGRectMake (0,0, collectionView.bounds.size.width, collectionView.bounds.size.height + 10);' ma senza fortuna – Wingzero

+0

puoi aggiungere un osservatore con keypath 'collectionView.contentSize ', quando contentSize è cambiato, puoi assegnare un nuovo valore se non più grande della framesize – Suen

risposta

-3
- (void)_edgeInsetsToFit { 
    UIEdgeInsets edgeInsets = self.collectionView.contentInset; 
    CGSize contentSize = self.collectionView.contentSize; 
    CGSize size = self.collectionView.bounds.size; 
    CGFloat heightOffset = (contentSize.height + edgeInsets.top) - size.height; 
    if (heightOffset < 0) { 
     edgeInsets.bottom = size.height - (contentSize.height + edgeInsets.top) + 1; 
     self.collectionView.contentInset = edgeInsets; 
    } else { 
     edgeInsets.bottom = 0; 
     self.collectionView.contentInset = edgeInsets; 
    } 
} 

Ho chiamato questo metodo dopo layoutSubviews

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    _STAssetViewController *weakSelf = self; 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     [weakSelf _edgeInsetsToFit]; 
    }); 
} 

Si può provare in questo modo

+0

Ho provato il tuo codice, ma ancora non funziona; Sento che non è questo il caso. La collezioneView non può scorrere, mentre nessuna cella annega sullo schermo. Se c'è almeno una cella, tutto ok. Hai provato con una vista collezione vuota con il codice? – Wingzero

+0

Penso che non si tratti di contentSize, quando sto avendo una cella, il contentSize è '{375, 117}' e apparentemente '117' è all'interno dello schermo, e posso ancora scorrere o rimbalzare; ma quando nessuna cella, la dimensione del contenuto è '{375, 7}', e non penso che '117' possa attivare il pull mentre' 7' non può – Wingzero

+0

@Wingzero che ho provato, funziona. http://bcs.duapp.com/vendor/product/code.png http://bcs.duapp.com/vendor/product/effect.png la prima immagine è il codice, aggiungo una vista rossa a scrollview a valid se scorre, la seconda immagine è il risultato, ho trascinato la collectionview. – Suen

39

fare in questo modo:

self.collectionView.alwaysBounceVertical = YES; 

risposta da @VNJ a here

13

modificare questa impostazione nel tuo storyboard:

enter image description here

Problemi correlati