2012-11-05 7 views
7

Ich habe eine Auflistungsansicht, die verschiedene benutzerdefinierte Zellen enthält.UICollectionView: UICollectionViewCell-Objekt ist immer null in sizeForItemAtIndexPath

Diese Zellen enthalten unterschiedliche Inhalte, die in der Größe variieren.

Die Zellen sind im Storyboard definiert, daher ist keine Registrierung im Code erforderlich.

Alles, was ich jetzt tun möchte, ist die Größe in der Methode delegieren ändern je nach Inhalt:

- (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 
... 

} 

Das Verfahren wird wie erwartet für jede Zelle genannt, aber cellAtIndexPath gibt immer NULL, egal, was ich versucht. So kann ich nicht auf das Zellobjekt im IndexPath oder seiner Inhaltsansicht zugreifen.

Irgendwelche Vorschläge, warum ich nicht auf das Zellobjekt zugreifen kann?

Antwort

11

Die Methode collectionView:layout:sizeForItemAtIndexPath wird vom Flow-Layout-Objekt der Sammlungsansicht aufgerufen. Das Layout fragt nach der Größe einer Zelle zu einer Zeit bevor die Zellen der Sammlungsansicht hinzugefügt werden. Sie müssen die gewünschte Zellengröße "alleine" berechnen und zurückgeben.

+2

Danke! Aus dieser Perspektive ist es nicht möglich, abhängig von den Subviews unterschiedliche Zellenhöhen zu setzen (normalerweise rufen Sie sizeToFit auf, um sie zu berechnen). Gibt es keine Möglichkeit, die Zellen abhängig von ihrem Inhalt zu "skalieren"? Z.B. Für UILabels müssten Sie die Höhe nach Linie und Textlänge berechnen. Und das wäre sehr ungenau. – crud21

+0

Rechts. Sie können Wege finden, um die Zellengröße zu berechnen, wenn es von seinem Inhalt abhängt, aber Sie können nicht von den Zellansichten abhängen. (ZB 'NSString' stellt Methoden zum Abrufen von Textdimensionen zur Verfügung.) – chris

+4

Das ist albern und unglücklich ... Geht' UITableView' nicht zur Datenquelle und holt die Zelle, wenn Sie nach einer Zelle fragen, die noch nicht existiert ? – jtbandes