Mit der Antwort aus einer vorherigen Frage machte ich eine unendliche Bildlaufleiste. Ich habe jedoch ein Problem beim Scrollen.
Es scheint, dass für eine Millisekunde die UICollectionView
(oder vielleicht auch UIScrollView
) denkt, dass die gezeigten Zellen nicht mehr sichtbar sind und die Zellen für neue Zellen wiederverwendet werden. Dies führt dazu, dass Zellen beim Scrollen doppelt verwendet werden.
Der Grund, warum ich glaube, dass dies die Ursache meines Problems ist, liegt darin, dass der "Cheat", den man benutzt, um unendliches Scrollen zu können, das contentOffset
des UIScollView
ist.
Die Zellen meiner UICollectionView
enthalten ein Hintergrundbild, das asynchron (aus dem Cache geholt) mit MKNetworkKit
heruntergeladen wird.
Eine der anderen Nebenwirkungen ist, dass beim Scrollen einer Ansicht "Bildschirmlängen" hintereinander der Bildschirm abgeschnitten wird. Fast so, als ob ein reloadData in UIScrollView
aufgetreten wäre, aber der Code lädt die Daten überhaupt nicht neu.
Meine Frage ist: Wie kann ich verhindern, dass UICollectionView
sichtbare Zellen wieder verwendet und die Ansicht plötzlich abschneidet?
Es sieht so aus, als würde ich sichtbare Zellen wiederverwenden, wenn ich das Gerät rotiere. Ich war Bildschirm mit Bildern aus der Web-Bildsuche gefüllt und verwendet feste Bemaßung, um UICollectionView-Grenzen für Hoch- und Querformat genau zu füllen. Aber Stretching Bilder Fehlgröße Ich habe ein wenig gesetzt, und ich sah wiederverwendet oder einige mehr Zellen beim Rotieren (auch Reload Daten). Ich löse es mit der Berechnung der aktuellen Bildgröße kurz vor dem Neuladen (bei collectionView: numberOfItemsInSection :) von der Anzahl der gewünschten Bilder. Eine genaue Bildanpassung verhindert, dass ich extra belastet und wiederverwendet werden kann.
Tags und Links objective-c ios uicollectionview cocoa-touch uiscrollview