2014-06-16 13 views
5

Ho una vista di raccolta che usa il layout del flusso che ha una vista di intestazione supplementare che è una vista che a volte voglio solo visualizzare. Quindi, in pratica, voglio avere un pulsante che, quando cliccato, rimuova la vista supplementare dalla vista della collezione e anche riposiziona tutti gli elementi nella vista della collezione con la considerazione che l'intestazione è sparita. È possibile? L'ho provato ripetutamente in molti modi. Cambiando la dimensione dell'intestazione di riferimento, cambiando la mia risposta al metodo delegato per le dimensioni dell'intestazione, invalidando il layout, ricaricando i dati ecc ecc. Ecc. Cosa mi manca?UICollectionView non può comprimere o rimuovere la vista complementare

Ho appena eseguito un test. Penso che sia legato all'uso di UIDynamics, cosa c'è in UIDynamics che sovrascriverà la mia risposta delegata per la dimensione di riferimento della sezione di intestazione?

+0

Stesso problema ... pensando di spostare semplicemente la vista supplementare in una cella di visualizzazione della raccolta. –

risposta

4

Nei metodi di layout del delegato restituire la dimensione appropriata per qualunque stato che ti interessa:

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section { 
    if (self.headerVisble) { 
     return CGSizeMake(collectionView.bounds.size.width, 30.0f); 
    } 
    else { 
     return CGSizeZero; 
    } 
} 

Poi, quando è necessario aggiornare la chiamata di layout:

[collectionView.collectionViewLayout invalidateLayout]; 

La collezione vista volontà chiedi all'oggetto Layout nuove informazioni che a loro volta chiederanno al tuo delegato. Credo che animerà anche il cambiamento.

+2

Non mi anima per 9.2.1 –

Problemi correlati