iOS 7: Belassen der angezeigten Elemente im Anzeigebereich nach dem Drehen von UICollectionView

Ich benutze einUICollectionView mit horizontalem Bildlauf (Layout =UICollectionViewFlowLayout). Nach der Drehung passe ich den Versatz des Inhalts so an, dass vor der Drehung dieselben Elemente angezeigt werden. Bei der Drehung wird die Breite der Elemente geändert, da immer sieben Elemente auf dem Bildschirm angezeigt werden. Mein aktueller Ansatz funktioniert für iOS 8, aber nicht für iOS 7.

Auf iOS 7layoutAttributesForItemAtIndexPath gibt unabhängig von der Ausrichtung immer dieselbe X-Position zurück. So scheint es, dass einige Rahmen nicht richtig angepasst sind. Die Berechnung der Größe der Elemente scheint korrekt zu sein, da sie sich entsprechend ändern.

Dies ist mein Code:

Meine Hauptansicht-Steuerung:

public override void DidRotate (UIInterfaceOrientation fromInterfaceOrientation)
{
    base.DidRotate (fromInterfaceOrientation);
    myProblematicCollectionView.invalidateLayout ();
}

Die Methode aus der Sammlungsansicht:

public void invalidateLayout(){
    Layout.InvalidateLayout ();
    UICollectionViewLayoutAttributes layoutAttributesForItem = CollectionView.GetLayoutAttributesForItem (NSIndexPath.FromItemSection (0, CurrentVisibleSection));
    CollectionView.SetContentOffset (new CGPoint (layoutAttributesForItem.Frame.X, 0), false);      
}

Der Code ist in C #, aber es sollte Sie nicht stören. Sie können Lösungen auch in Objective-C oder Swift veröffentlichen.

CurrentVisibleSection ist der Abschnitt mit den sieben Elementen. Es ist immer auf dem neuesten Stand. WannGetLayoutAttributesForItem oderlayoutAttributesForItemAtIndexPath heißt, dasGetSizeForItem odercollectionView:layout:sizeForItemAtIndexPath: wird aufgerufen, bevor der Inhaltsoffset festgelegt wird.

Hat jemand eine Ahnung, warum ich unabhängig von der Ausrichtung immer das gleiche Layout-Attribut erhalte?

Bearbeiten

Wenn ich benutzereloadData bevor Sie @ anruflayoutAttributesForItemAtIndexPath Ich bekomme die richtige Größe. Brauche ich das nachinvalidateLayout?

Was ich auch nicht bekomme, ist, dass die Sammlungsansicht die richtige Größe hat (Rahmenbreite ist korrekt).

Antworten auf die Frage(0)

Ihre Antwort auf die Frage