Ich habe eine UICollectionViewController
Verwaltung einer Sammlungsansicht, die verschiedene Layouts für verschiedene App-Status verwendet. Ich verwende -setCollectionViewLayout:animated:
, um zwischen den verschiedenen Layouts zu wechseln. Ich habe einen schlechten Zugriffsfehler, und es würde immens helfen zu wissen, was tatsächlich besitzt (z. B. hält eine strong
Referenz auf) das aktuelle Layout der Kollektionsansicht.UICollectionViewController-Layoutbesitz (self.collectionView.collectionViewLayout vs. self.collectionViewLayout)
Nach -setCollectionViewLayout:animated:
Aufruf, habe ich folgendes bemerkt (wo self
ist die UICollectionViewController
):
self.collectionView.collectionViewLayout
das neue Layout zurück.- gibt immer noch das alte Layout zurück.
Dies führte mich die UICollectionView Class Reference zu überprüfen, die dieses Verhalten erklärt:
collectionViewLayout
Das Objekt Layout verwendet initialisieren die Sammlung View-Controller. (Read-only)
@property (nonatomic,readonly) UICollectionViewLayout *collectionViewLayout
Diskussion
Diese Eigenschaft enthält das Layout Objekt, das Sie an die initWithCollectionViewLayout geben: Methode. Das Layoutobjekt in dieser Eigenschaft wird nicht aktualisiert, um Änderungen an der Sammlungsansicht selbst anzuzeigen. Sie können diese Eigenschaft verwenden, um auf das Layoutobjekt zu verweisen, für das Sie ursprünglich die zu verwendende Auflistungsansicht konfiguriert haben.
Okay. So self.collectionViewLayout
ist eine schwache Referenz (oder ist es?) Auf das ursprüngliche Layout und self.collectionView.collectionViewLayout
ist eine starke Bezugnahme auf das aktuelle Layout.
Um dies zu bestätigen, nahm ich einen Tauchgang in den Debugger, aber war von der UICollectionViewController
im Besitz der tatsächlichen UICollectionView
angeblich nicht finden können. Stattdessen war die Variable _view
des Sammlungsansicht-Controllers eine Instanz von UICollectionViewControllerWrapperView
. Whaaat?
Diese ganze Erfahrung hat mich mit den folgenden Fragen:
- Wo ist die tatsächliche
UICollectionView
in einemUICollectionViewController
gespeichert? - Bewirkt
self.collectionViewLayout
einestrong
Referenz auf das ursprüngliche Layout?