UICollectionViewFlowLayout wird nicht direkt bei der Änderung der Ausrichtung ungültig
ich habe eine UICollectionView mit einem UICollectionViewFlowLayout. Ich auch umsetzen UICollectionViewDelegateFlowLayout Protokoll.
In meinem datasource ich habe eine Reihe von UIViewControllers, die reagieren, um ein eigenes Protokoll, so kann ich bitten, für Ihre Größe und einige andere Sachen.
In der FlowLayout delegieren, wenn es fragt nach der sizeForItemAtIndexPath: ich das Einzelteil Größe, die ich von meinem Protokoll. Die ViewControllers die Implementierung meines Protokolls zurückkehren einen anderen Artikel Größe je nach Ausrichtung.
Nun, wenn ich das ändern der Geräteausrichtung von hoch-ins Querformat, gibt es kein problem (Elemente größer in der Landschaft), aber wenn ich es wieder ändern, bekomme ich diese Warnung:
the item width must be less that the width of the UICollectionView minus the section insets left and right values.
Please check the values return by the delegate.
Es noch funktioniert, aber ich weiß nicht, wie es zu Verwarnungen erhalten, so können Sie vielleicht mir sagen, was ich falsch mache. Auch gibt es ein anderes problem. Wenn ich nicht sagen, mein collectionViews collectionViewLayout ungültig in willAnimateRotationToInterfaceOrientation: die sizeForItemAtIndexPath: nie aufgerufen wird.
Hoffe, Sie verstehen, was ich meine. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen 🙂
InformationsquelleAutor der Frage xxtesaxx | 2013-05-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Lösung ist die Verwendung KVO und hören eine änderung an den Rahmen des superview für Ihre Sammlung anzuzeigen. Calling-reloadData arbeiten und loszuwerden, die Warnungen. Es gibt eine zugrunde liegende timing-Problem hier...
InformationsquelleAutor der Antwort kwigbo
Diese Antwort ist spät, aber die akzeptierte Antwort hat bei mir nicht funktioniert. Ich sympathisiere mit der OP wollen eine fire-and-forget-UICollectionViewFlowLayout. Ich schlage vor, dass ungültig zu machen, das layout im view-controller ist in der Tat die beste Lösung.
Wollte ich eine einzelne horizontale Scroll-Zeile von Zellen, zentriert in der Ansicht, in sowohl hoch-und Querformat.
Ich Unterklassen UICollectionViewFlowLayout.
Ich überschrieb prepareLayout die Neuberechnung der Einsätze und rufen Sie dann [super prepareLayout].
Ich überschrieb den getter für collectionViewContentSize zu machen bestimmte der Inhalt Größe richtig war.
Layout ungültig nicht auf seine eigene, obwohl die Grenzen änderten sich mit der Neuausrichtung.
Den UICollectionViewFlowLayout unterhält die scroll-position zwischen den Orientierungen. Die gleiche Zelle zentriert nur, wenn Sie quadratisch ist.
InformationsquelleAutor der Antwort Bob Wakefield
Ich habe eine Kombination der beiden Antworten hier zu tun, was wir alle versuchen zu tun, ist wirklich eine Sammlung erstellen, anzeigen, die Aussehen wie eine Tabelle anzeigen, aber nicht verwenden UITableView und get-Elemente in einer einzigen Spalte (höchstwahrscheinlich)
InformationsquelleAutor der Antwort cynistersix
Variation auf @meelawsh Antwort, aber in Swift, und ohne ein
self.sizeForCollectionView
Eigenschaft:InformationsquelleAutor der Antwort Kenny Winker
Ich weiß nicht, ob es helfen kann, jemand, aber keiner der letzten Antwort mir helfen, denn ich bin mit einigen
UIViews
in eineUIScrollView
.Ich öffne die UIViews programmgesteuert je einige Veranstaltungen. So kann ich nicht verwenden
- (void) willRotateToInterfaceOrientation:
undinvalidateLayout
oderreloadData
weil:1. invalidateLayout "tritt während der nächsten Ansicht-layout-update-Zyklus."
2. reloadData "Für die Effizienz, die der Ansicht Sammlung zeigt nur die Zellen und der ergänzenden views sichtbar sind."
Was für mich gearbeitet wurde, verwenden Sie die Breite der collectionView die Eltern (UIView) in:
Für einige Grund, der collectionView Rahmen hatte die Breite von portrait an der Zeit, die zum aufrufen dieser Funktion verwenden...
int currentWidth = self.frame.width
mir helfen es zu beheben.InformationsquelleAutor der Antwort MiguelHincapieC
iOS8: der einzige Weg, ich könnte die Stille die Warnung zu rufen ist ungültig, während der übergang beim drehen, um eine größere Größe und vor dem übergang beim drehen auf eine kleinere Größe.
InformationsquelleAutor der Antwort meelawsh
@0mahc0 Antwort für mich gearbeitet, aber nur teilweise.
Habe ich nicht das problem drehen, weil ich Kraft meiner app nur im Portrait-Modus, aber meine Lösung hilft anderen mit dem gleichen problem.
Die Warnung zeigt jedes mal, wenn die Ansicht angezeigt wird. Der Grund für die Warnung ist ganz klar, wir haben definiert, Abschnitt Abstände zur linken und rechten Seite der UICollectionView. Überprüfen Sie den interface builder und Sie werden sehen, in Metriken, die diese Werte definiert.
@0mahc0 die Lösung funktioniert, aber ich will dehnen Sie die Zelle, max-width, so dass ich entfernt und die Abstände Abschnitt, sonst habe ich eine 'Marge' Links und rechts.
Statt der Implementierung der delegate-Methode, die Sie gehen können, um zu interface builder und ändern Sie den Wert auf null von Links und rechts Einschübe.
InformationsquelleAutor der Antwort Pedro Romão