Ich zeige dynamische Bilder an, die vom Server in einer horizontalen Sammlungsansicht empfangen wurden. Wenn ich die Sammlungsansicht eingerichtet habe, stelle ich folgendes ein:
%Vor%}
Für cellForRowAtIndexPath lade ich das Bild wie folgt herunter:
%Vor%}
Es werden jedoch Hoch- und Querformatbilder in der Sammlungsansicht angezeigt. Portrait Bilder werden gut angezeigt, aber Landschaftsbilder erscheinen in der Sammlungsansicht zu klein. Was muss ich tun, um die Größe der Zelle entsprechend der Bildgröße zu ändern, so dass sie das korrekte Seitenverhältnis ausfüllen ?
Ich habe eine Methode wie die folgende hinzugefügt, aber das Problem ist, dass sie für alle Zellen gleichzeitig am Anfang aufgerufen wird und nicht aufgerufen wird, wenn ich das Bild in der cellForRowAtIndexPath-Methode heruntergeladen habe:
%Vor%{
%Vor%}
Daher frage ich mich, wie ich dieses Feature erreichen kann. Lassen Sie mich wissen, ob diesbezüglich mehr Informationen benötigt werden?
In -setImageWithURLRequest:...
, wenn das Image geladen wird, wird es in einer Hashtabelle zwischengespeichert und dann -reloadItemsAtIndexPaths:
mit dem aktuellen Imagepfad aufgerufen, um die Zelle neu zu laden und die CollectionView erneut zu überprüfen, wie groß die Zelle sein sollte .
Stellen Sie sicher, dass Sie die Hash-Tabelle konsultieren, wenn Sie das Bild nachschlagen. Dadurch sparen Sie auch zusätzliche Netzwerkzugriffe in Fällen, in denen die collectionView-Elemente außerhalb des Bildschirms und wieder zurück scrollen.
Hinweis: Ich mache mir Sorgen, dass Ihr Code fehlschlagen kann, wenn Sie eine UICollectionReusableView
-Unterklasse verwenden, da Zellen wiederverwendet werden können, bevor ihre Bilder geladen werden, sodass die Bilder an der falschen Stelle geladen werden.
Fügen Sie jedoch eine Delegate-Methode von UICollectionView hinzu.
%Vor%Tags und Links objective-c ios uicollectionview uicollectionviewcell uicollectionviewlayout