2012-11-05 17 views
7

Ho una vista di raccolta che contiene celle personalizzate differenti.UICollectionView: l'oggetto UICollectionViewCell è sempre null in sizeForItemAtIndexPath

Queste celle contengono contenuto diverso che varia in termini di dimensioni.

Le celle sono definite nello Storyboard, quindi nessuna registrazione è necessaria nel codice.

Tutto quello che voglio fare ora è cambiare la dimensione del metodo delegato a seconda del contenuto:

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

id cellAtIndexPath = [collectionView cellForItemAtIndexPath:indexPath]; 

NSLog(@"The cell: %@", cellAtIndexPath); 

... 
e.g. calling sizeToFit methods and cumulating the sizes of the cells' subviews 
... 

} 

il metodo viene chiamato come previsto per ogni cellula, ma cellAtIndexPath restituisce sempre NULL, non importa quello che ho provato. Quindi non sono in grado di accedere all'oggetto cella in indexPath o nella sua vista contenuto.

Qualche suggerimento perché non riesco ad accedere all'oggetto cella?

risposta

11

Il metodo collectionView:layout:sizeForItemAtIndexPath viene chiamato dall'oggetto di layout del flusso della vista dell'insieme. Il layout richiede la dimensione di una cella alla volta prima delle le celle vengono aggiunte alla vista di raccolta. Dovrai calcolare la dimensione della cella desiderata "da sola" e restituirla.

+2

Grazie! Quindi, da questo punto di vista non è possibile impostare altezze delle celle diverse a seconda delle sottoview (di solito si chiama sizeToFit per calcolarlo)? Non c'è alcuna possibilità di "ridimensionare" le celle a seconda del loro contenuto? Per esempio. per UILabels, dovresti calcolare l'altezza per riga e lunghezza del testo. E questo sarebbe molto impreciso. – crud21

+0

Giusto. È possibile trovare i modi per calcolare la dimensione della cella se dipende dal suo contenuto, ma non si può dipendere dalle visualizzazioni della cella. (Ad esempio 'NSString' fornisce metodi per ottenere le dimensioni del testo.) – chris

+4

Questo è sciocco e sfortunato ... Non' UITableView' vai alla sorgente dati e ottieni la cella se la chiedi per una cella che non esiste ancora ? – jtbandes

Problemi correlati