web-dev-qa-db-fra.com

Uicollectionview whing contestiensize sur la première charge, corrigez après cela

J'ai une vision uicollection commune avec une pagination et tout.

En essayant toujours de comprendre pourquoi sur ViewDidLoad:, ViewWillappear: et ViewDidAppear:, uniquement sur l'appel de première vue, je reçois la mauvaise taille lorsque vous appelez myCollectionview.Collectionview.ContSeSize.Width. Il répond toujours avec 0 largeur (la hauteur est toujours correcte). Recharge successive de la vue me donne le bon.

Eu recours à l'utilisation

self.collectionView.collectionViewLayout.collectionViewContentSize

ce qui me donne l'événement de largeur correct sur la première charge.

Toujours un mystère pour moi.

25
klauslanza

Je voyais donc un problème similaire où la largeur du contenu était toujours zéro. La réponse simple est ... Il n'y a probablement aucun contenu dans la collectionview encore. C'est pourquoi la taille du contenu est nulle.

Je remarquais aussi que parfois après avoir appelé invalidateLayout sur mon uicollectionview, je voyais que self.collectionView.collectionViewLayout.collectionViewContentSize n'était pas la même chose que self.collectionView.contentSize.

Après de nombreuses recherches, j'ai trouvé une excellente astuce ici dans ce SO POST

Ce que je devais faire pour obtenir les deux calculs de contenus pour être la même chose était d'appeler [self.collectionView layoutIfNeeded] Immédiatement après avoir appelé [self.collectionView reloadData] ou [self.collectionView.collectionViewLayout invalidateLayout].

Cela oblige essentiellement que la recharge se produise immédiatement au lieu du prochain cycle d'exécution.

J'espère vraiment que cela résout votre problème.

55
ucangetit