2014-07-21 12 views
10

Ho una vista raccolta che ha un UICollectionViewFlowLayout Ho inserito 10 elementi. e hanno dimensioni diverse:UICollectionVisualizza layout dell'ultima cella

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { 

if (indexPath.row<6) { 
    CGSize retval = CGSizeMake(100, 100); 
    return retval; 
} 

CGSize retval = CGSizeMake(200, 130); 

return retval; 
} 

esso layout come: primi 6 celle guardare bene, e 7-9 sono corrette, ma l'ultimo non è il centro allineato,

enter image description here enter image description here

Qualcuno potrebbe spiegarmi questo?

e risentimento giorni Sto giocando con i layout di raccolta, ma mi sento ancora confuso con la selezione di flowlayout e layout personalizzato. qualche principio su questo?

molti thx in anticipo.

+1

UICollectionView tenta sempre di riempire il numero di elementi che possono essere contenuti nella riga. Puoi vedere quello nel tuo esempio: nell'immagine 1, c'è spazio per 3 elementi per riga, ma nell'immagine 2, c'è solo spazio per un'immagine. Ora il problema nell'ultima riga è che UICollectionView non sa, se un altro oggetto sarà lì o meno, quindi si allinea al lato e attende un elemento successivo. Questo è un problema con autoLayout, le viste sono allineate automaticamente e non con il delegato del layout. (Forse questo aiuta qualcuno a risolvere questo problema, in quanto sembra essere ancora aperto) – choli

risposta

4

Mi sono imbattuto in un problema simile con le ultime celle nella vista di raccolta con un offset sgradevole. Nel mio caso è stato il risultato di non rispettare gli inserti della sezione rispetto alle dimensioni degli articoli.

Provare a impostare la sectionInset del FlowLayout a 0:

flowLayout.sectionInset = UIEdgeInsetsZero; 

Se questo non funziona potrebbe essere necessario applicare una minimumInterItemSpacing come il layout di flusso sembra per inculare questo in su sulle ultime poche cellule:

flowLayout.minimumInteritemSpacing = 10.f;//or any reasonable number 
Problemi correlati