Mon installation: Un UICollectionView standard avec une disposition de flux; datasource est défini sur mon contrôleur. La disposition est configurée comme d'habitude dans le fichier xib. Lorsque je tente d'accéder à une mise en page de cellule attributs via layoutAttributesForItemAtIndexPath: dans la méthode viewDidLoad du contrôleur comme ceci:layoutAttributesForItemAtIndexPath de UICollectionViewFlowLayout renvoie zéro lorsqu'il est appelé "trop tôt"
NSLog(@"LayoutAttribute: %@", [self.collectionView.collectionViewLayout layoutAttributesForItemAtIndexPath: [NSIndexPath indexPathForRow:0 inSection:0]]);
La sortie est
"LayoutAttribute: (null)"
même si la mise en page a toutes les informations nécessaires pour me donner la attributs de mise en page corrects. Il ne fonctionne toujours pas viewWillAppear :, mais « comme par magie » commence à travailler dans viewDidAppear:
"LayoutAttribute: <UICollectionViewLayoutAttributes: 0x8c4f710> index path: (<NSIndexPath 0x8c48be0> 2 indexes [0, 0]); frame = (0 0; 50 50);"
J'ai découvert une façon très étrange de le faire fonctionner; Je seulement l'accès à l'collectionViewContentSize avant de demander la mise en page des attributs:
NSLog(@"Layout content size: %@", NSStringFromCGSize(self.collectionView.collectionViewLayout.collectionViewContentSize));
NSLog(@"LayoutAttribute: %@", [self.collectionView.collectionViewLayout layoutAttributesForItemAtIndexPath: [NSIndexPath indexPathForRow:0 inSection:0]]);
La sortie est, comme prévu tout le long:
"Layout content size: {768, 50}"
"LayoutAttribute: <UICollectionViewLayoutAttributes: 0x8c4f710> index path: (<NSIndexPath 0x8c48be0> 2 indexes [0, 0]); frame = (0 0; 50 50);"
Ce qui se passe ici? Je suppose que l'accès à la taille du contenu déclenche quelque chose dans la mise en page, mais est-ce que quelqu'un sait s'il existe un moyen approprié de le faire? Ou est-ce juste un bug ennuyeux?