2012-12-07 3 views
6

I sottoclasse UICollectionViewLayout. Fin qui tutto bene.
Tuttavia, ho alcune celle più larghe dello schermo, che a volte scompaiono durante lo scorrimento. Quando si scorre un po 'di più, riappaiono magicamente dove dovrebbero essere. Posso mostrarti il ​​mio codice, tuttavia ritengo che non ci sia nulla di sbagliato in questo, visto che funziona nel 90% dei casi. Tuttavia, a volte le celle molto grandi (più di due volte le dimensioni dello schermo) scompaiono.UICollectionViewCell di grandi dimensioni scompare con layout personalizzato

NSMutableArray* attributes = [NSMutableArray array]; 
for (int section=0; section < [[self collectionView] numberOfSections]; section++) { 
    [attributes addObject:[self layoutAttributesForSupplementaryViewOfKind:UICollectionElementKindSectionHeader atIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]]]; 
     for (int row=0; row < [[self collectionView] numberOfItemsInSection:section]; row++) { 
      NSIndexPath* indexPath = [NSIndexPath indexPathForItem:row inSection:section]; 
      [attributes addObject:[self layoutAttributesForItemAtIndexPath:indexPath]]; 
     } 
} 
return attributes; 

Ho anche questi post: UICollectionView's cell disappearing e Large cells in a UICollectionView getting removed while the cell is still displayed Tuttavia, una soluzione non è menzionato. Qualcuno può aiutarmi con questo? Potrebbe essere il problema da parte di Apple? E se lo è, c'è qualcosa che posso fare per risolverlo da solo?

risposta

5

Mi spiace dirti: sono quasi certo che si tratta di un bug reale in UICollectionView; Mi sono imbattuto in questa stessa identica cosa qualche settimana fa. Ho creato un piccolo programma per dimostrare il bug e archiviato un RADAR con Apple, ma non ho ancora sentito se hanno intenzione di risolverlo. La soluzione migliore che riesco a pensare (attenzione: non ho ancora implementato questa soluzione alternativa) è di notare che gli attributi del layout sono molto lontani dai bordi dello schermo, cambiano intenzionalmente i limiti degli attributi della cella in modo che si spengano solo leggermente schermo e possibilmente memorizza quell'offset (la quantità che hai ritagliato da ciò che dovrebbero essere i veri limiti) come un campo personalizzato aggiuntivo nel layoutAttributes, in modo che la tua cella sappia disegnare il suo contenuto correttamente. Il che sembra un vero e proprio trucco, ma dovrebbe funzionare.

+0

Hai sentito di nuovo nel tempo di intervento? –

0

Sei sicuro di restituire l'oggetto attributo giusto per questa cella quando viene chiamato il metodo -(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect e quando il rect è solo una parte della tua cella?

+0

Gli utenti segnalano inoltre problemi con celle molto grandi. Vedi: http://stackoverflow.com/questions/13016302/large-cells-in-a-uicollectionview-getting-removed-while-the-cell-is-still-displa?rq=1 – CitronEvanescent