UICollectionView Invalider La Disposition Sur Les Limites Des Changements
J'ai actuellement le fragment de code suivant pour le calcul de UICollectionViewCells
tailles:
- (CGSize)collectionView:(UICollectionView *)mainCollectionView
layout:(UICollectionViewLayout *)collectionViewLayout
sizeForItemAtIndexPath:(NSIndexPath *)atIndexPath
{
CGSize bounds = mainCollectionView.bounds.size;
bounds.height /= 4;
bounds.width /= 4;
return bounds;
}
Cela fonctionne. Cependant, je suis maintenant l'ajout d'un clavier d'observateur dans viewDidLoad
(ce qui est le déclenchement de la le délégué de source de données et méthodes pour la UICollectionView
avant qu'il n'apparaisse et redimensionne à partir de la table de montage séquentiel). Les limites sont donc dans l'erreur. Je tiens également à l'appui de la rotation. Ce qui est une bonne façon de traiter ces deux cas limites et re-calcul de la taille si le UICollectionView
des changements de taille?
OriginalL'auteur Stussa | 2015-03-13
Vous devez vous connecter pour publier un commentaire.
La solution pour invalider votre disposition lorsque les limites de l'affichage de la collection des changements est de remplacer
shouldInvalidateLayoutForBoundsChange:
et retourYES
.Il est également indiqué dans la documentation: https://developer.apple.com/documentation/uikit/uicollectionviewlayout/1617781-shouldinvalidatelayoutforboundsc
Cela devrait couvrir la rotation de l'aide. Si ça ne marche pas, mettre en œuvre
viewWillTransitionToSize:withTransitionCoordinator:
shouldInvalidateLayoutForBoundsChange
sonne bien, mais ne fonctionne pas pour moi. L'appel deinvalidateLayout
manuellement fonctionne! Merci!Lors de l'affichage de la collection est à l'intérieur d'un
UISplitViewController
'détail contrôleurwillTransition(to:coordinator:)
n'est pas toujours appelé.et pour swift? il dit "non trouvé" ou "non dominante"... des idées? désolé, devrait être quelque chose reaaaaally facile...
OriginalL'auteur tubtub
Vous devez gérer le cas lors de l'affichage de la collection la taille est modifiée. Si vous changez l'orientation ou de contraintes, viewWillLayoutSubviews méthode sera déclenchée.
Vous devez invalider la collection actuelle de la vue de mise en page. Après la mise en page est invalidé par l'aide de invalidateLayout méthode, la UICollectionViewDelegateFlowLayout méthodes sera déclenchée.
Voici l'exemple de code:
-viewWillLayoutSubviews
être invoquée à l'infini.. j'ai mis ce code dans un mauvais contrôleur? Aussi puis-je invoquer super?C'est aussi bon pour quand vous avez besoin d'avoir des mises en page personnalisées dans la barre d'onglet afficher les contrôleurs de A, B, & C, de sorte que lorsque vous êtes sur CR UN et faire tourner, vous avez besoin de CR B pour la mise à jour de sa mise en page, de sorte que si l'utilisateur onglets sur VC B, vous montrent encore un bon sens de la vue.
OriginalL'auteur eXtreme
Cette approche permet de le faire sans sous-classement de la mise en page, au lieu de l'ajouter à votre, sans doute déjà existant
UICollectionViewController
sous-classe, et évite le potentiel de manière récursive appelviewWillLayoutSubviews
c'est une variante de la solution retenue, légèrement simplifiée, en ce qu'il n'utilise pas letransitionCoordinator
. Dans Swift:OriginalL'auteur possen