Kontekst: Używam AsyncDisplayKit do załadowania tabeli z tekstem i obrazami. Obrazy są pobierane z Internetu, a rozmiary obrazów są nieznane, dopóki obraz nie zostanie pobrany.Przekształcenie ASTableView z AsyncDisplayKit po pobraniu obrazów przy użyciu ASNetworkImageNode
Co usiłuję zrobić: Po zakończeniu pobierania obrazu, chcę ponownie rozmiar i układ komórkę, aby pomieścić na obrazie, a następnie re-size i układ tabeli w celu dostosowania dla nowa wysokość komórki.
Co zrobiłem do tej pory: początkowo zwrócić ASTableView tylko z tekstu i użyć metody delegat ASNetworkingImage, imageNode: metodę didLoadImage, aby otrzymywać powiadomienia, gdy obraz jest zakończeniu pobierania.
- (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];
}
jestem w stanie z powodzeniem ponownie obliczyć wielkość pojedynczej komórki i re-układ i wyciągnąć komórkę, aby pasowały do pobranego obrazu.
Issues: Jednak obok muszę ponownie DTP tabelę, aby przesunąć inne komórki w dół lub w górę, aby pasowały do nowego rozmiaru zaktualizowanego komórce. TO JEST CO NIE MOŻNA DOSTAĆ DO PRACY.
Próba nr 1 spowoduje ponowne obliczenie subskrybentów tabeli i zmiany układu, ale spowoduje to również ponowne załadowanie wszystkich danych, co nie jest tym, czego chcę. Chcę po prostu ponownie obliczyć i zmienić układ komórek, a nie ponownie załadować wszystkie dane.
Próba # 2: Podczas korzystania z UITableView, spowoduje to wywołanie tableView: heightForRowAtIndexPath i ponowne rozmieszczenie wszystkich komórek tabeli, ale niestety w przypadku ASTableView spowoduje to wyjątek niezaimplementowany.
Pytanie: W jaki sposób programowo zrobić przekaźnik ASTableView się i konta dla nowych wysokości komórek?