99 votes

Modifier la taille de UICollectionViewCell sur les orientations de périphérique différent

Je suis en utilisant un UICollectionView avec UICollectionViewFlowLayout.

J'ai défini la taille de chaque cellule par le biais de la

collectionView:layout:sizeForItemAtIndexPath:

Lors du passage du mode portrait au mode paysage, je voudrais ajuster la taille de chaque cellule de complètement s'adapter à la taille de la CollectionView, sans laisser de remplissage de l'espace entre les cellules.

Questions:

1) Comment modifier la taille d'une cellule après une rotation de l'événement?

2) Et, mieux encore, comment faire une mise en page où les cellules toujours l'adapter à toute taille de l'écran?

Merci!

200voto

followben Points 3073

1) Vous pourriez maintenir et d'échanger de multiples objets de mise en page, mais il y a un moyen plus simple. Il suffit d'ajouter les lignes suivantes à votre UICollectionViewController sous-classe et d'ajuster les tailles selon les besoins:

- (CGSize)collectionView:(UICollectionView *)collectionView
                  layout:(UICollectionViewLayout *)collectionViewLayout
  sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{    
    // Adjust cell size for orientation
    if (UIDeviceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) {
        return CGSizeMake(170.f, 170.f);
    }
    return CGSizeMake(192.f, 192.f);
}

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation
{
    [self.collectionView performBatchUpdates:nil completion:nil];
}

Appelant -performBatchUpdates:completion: entraînera la nullité de la mise en page et de les redimensionner les cellules avec de l'animation (il vous suffit de passer néant, le bloc params si vous avez pas d'ajustements supplémentaires à effectuer).

2) au Lieu de coder en dur les tailles des éléments en -collectionView:layout:sizeForItemAtIndexPath, juste diviser la hauteur ou la largeur de la collectionView de limites par le nombre de cellules que vous voulez adapter à l'écran. Utiliser la hauteur si votre collectionView défile horizontalement ou la largeur si elle défile verticalement.

33voto

Hai Feng Kao Points 753

Si vous ne voulez pas les animations supplémentaires présentées par , il suffit d’utiliser pour forcer le collectionViewLayout à recharger.

13voto

Fiveagle Points 84

Je l’ai résolu en utilisant deux UICollectionViewFlowLayout. Un portrait et un paysage. J’ai assigner à mon dynamiquement collectionView in French - viewDidLoad

Alors j’ai simplement modifié mon collectionViewFlowLayoutDelgate méthodes comme ceci

Dernière j’ai passer d’une mise en page à une autre sur la rotation

8voto

Dannie P Points 507

Il y a un moyen simple pour définir la taille des cellules vue collection :

Vous ne savez pas si il est animatable cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X