2015-02-09 3 views
5

Kontext: Ich verwende AsyncDisplayKit, um eine Tabelle mit Text und Bildern zu laden. Die Bilder werden aus dem Internet heruntergeladen und die Bildgrößen sind unbekannt, bis das Bild fertig heruntergeladen ist.ASTableView von AsyncDisplayKit nach dem Herunterladen von Bildern mit ASNetworkImageNode neu erstellen

Was ich versuche zu tun: Nachdem das Bild Download beendet ist, möchte ich Größe neu und Layout der Zelle für das Bild aufzunehmen und dann die Größe neu und Layout der Tabelle für die zur Aufnahme neue Zellenhöhe.

Was ich bisher getan habe: ich zunächst die ASTableView ziehen nur mit dem Text und verwenden Sie die ASNetworkingImage Delegatmethode, imageNode: didLoadImage Methode benachrichtigt, wenn das Bild fertig heruntergeladen ist.

- (void)imageNode:(ASNetworkImageNode *)imageNode didLoadImage:(UIImage *)image { 

    // Scale image downloaded from Internet to fit constrained width 
    // Set networkImageNode to scaled image 
    UIImage *newimage = [self scaleImage:image toConstrainedWidth:CONSTRAINED_WIDTH]; 
    self.networkImageNode.image = newimage; 

    // Gets the parent cell 
    // Recalculate cell size and layout the cell (This works!) 
    MyAsyncTableCellNode *parentCell = ASDisplayNodeFindClass(self, [MyAsyncTableCellNode class]); 
    [parentCell invalidateCalculatedSize]; 
    [parentCell measure:CGSizeMake(CONSTRAINED_WIDTH, MAXFLOAT)]; 
    [parentCell layout]; 

    // Attempting to re-layout the table to shift the table cells 
    // to accommodate for the new cell height (ALL these do NOT work!) 
    MyAsyncTableViewController *parentTableViewController = ASDisplayNodeFindClass(self, [MyAsyncTableViewController class]); 
    // Attempt #1 
    [parentTableViewController.asyncTableView reloadData]; 

    // Attempt #2 
    [parentTableViewController.asyncTableView beginUpdates]; 
    [parentTableViewController.asyncTableView endUpdates]; 
} 

Ich bin in der Lage das heruntergeladene Bild, um erfolgreich die Größe der einzelnen Zelle und Wieder Layouts und ziehen Sie die Zelle neu zu berechnen, passen.

Probleme: jedoch nächstes muss ich wieder das Layout der Tabelle, die die anderen Zellen verschieben nach oben oder unten die neue Größe der aktualisierten Zelle zu passen. Das ist, was ich nicht zum arbeiten bekommen kann.

Versuch # 1 wird die Teilansichten der Tabelle neu berechnen und neu Layout, aber das lädt auch alle Daten neu, was ist nicht was ich will. Ich möchte nur die Zellen neu berechnen und neu anordnen, nicht alle Daten neu laden.

Versuch # 2: Wenn Sie UITableView verwenden, wird dies tableView: heightForRowAtIndexPath aufrufen und alle Tabellenzellen neu anordnen, aber für ASTableView führt dies leider zu einer nicht implementierten Ausnahme.

Frage: Wie programmiere ich das ASTableView-Relayout programmatisch und berücksichtige die neuen Zellenhöhen?

Antwort

0

Ihr erster Versuch sollte korrekt sein, da dies die Methoden numberOfSectionsInTableView, numberOfSectionsInTableView und nodeForRowAtIndexPath erneut aufruft und die Datenquelle nur dann neu laden sollte, wenn Sie dies so angegeben haben (wie bei einem regulären UITableView).

Verwandte Themen