2013-01-25 4 views
9

Voglio impostare l'intestazione in vista collezione, proprio come fa SetTableHeader di UITableViewController.Come posso impostare l'intera vista dell'intestazione su UICollectionView?

Ho trovato il modo di impostare l'intestazione di ogni sezione nella vista raccolta, ma non sono riuscito a trovare come impostare la vista dell'intestazione dell'intera intestazione.

di riferimento di Apple di UICollectionViewLayout dice "vista integrativi presenti dati, ma sono diversi rispetto alle cellule. A differenza delle cellule, viste supplementari non possono essere selezionati dall'utente. Invece, si utilizza viste supplementari per implementare cose come viste di intestazione e piè di pagina per una data sezione o per l'intera vista dell'insieme. Le viste supplementari sono facoltative e il loro uso e posizionamento sono definiti dall'oggetto di layout. ", ma non so come implementare la vista dell'intestazione per l'intera vista dell'insieme.

Ho provato a implementarlo creando un rettangolo di intestazione di sezione solo per la prima sezione, ma era diverso da quello di tableHeader.

Nella vista tabella, se si imposta l'offset del contenuto sull'intestazione di sotto, la dimensione del contenuto si espande automaticamente in modo che l'intestazione sia nascosta sebbene esistano alcuni elementi.

Ma nella vista di raccolta, la modifica dell'offset di contenuto funziona correttamente solo se esistono molti elementi sufficienti per eseguire uno scorrimento.

ho cercato di ampliare dinamicamente la dimensione del contenuto quando esistono alcuni elementi, ma sembra che non funziona bene ...

+0

possibile duplicato di [Come rendere la vista supplementare mobile in UICollectionView come le intestazioni di sezione fanno in stile semplice UITableView] (http://stackoverflow.com/questions/13511733/how-to-make-supplementary-view-float-in -uicollectionview-as-section-headers-do-i) – staticVoidMan

+0

@staticVoidMan Non è il duplicato. Si prega di leggere attentamente una domanda. – dzensik

risposta

1

ho implementato questo utilizzando un layout personalizzato e riposizionamento l'intestazione su ogni evento scroll . Inizia con sottoclasse UICollectionViewLayout, ci sono tonnellate di tutorial sul web, questo è una buona: http://markpospesel.wordpress.com/2012/10/25/fixing-circlelayout/

Quindi il trucco è quello di tornare sempre YES-shouldInvalidateLayoutForBoundsChange:, e in prepareLayout riposizionare (cioè cambiare telaio dei layoutAttributes.) Il intestazione basata sulla vista raccolta xOffset e yOffset.

Utilizzare una vista supplementare con NSIndexPath 0-0.

layoutAttributesForElementsInRect: verrà chiamato su ogni frame, quindi se si dispone di molti elementi nella vista raccolta, sarà necessario memorizzare nella cache il risultato in modo che non influenzi le prestazioni. Tutti gli attributi dovrebbero essere intatti tranne per quella intestazione.

Fonte: Ho trascorso 1 mese a lavorare su questo particolare argomento.