web-dev-qa-db-fra.com

Les sous-vues de remplissage et de découpe d'aspect d'échelle UIImage ne fonctionnent pas dans UICollectionView

J'ai un UICollectionView avec une cellule contenant un seul UIImageView. Je règle le frame.size UIImageView pour correspondre au frame.size de la cellule et demande également explicitement à UIImageView de mettre à l'échelle avec Aspect Fill & Clip Subview de la manière suivante dans cellForItemAtIndexPath méthode:

let cell:UICollectionViewCell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! UICollectionViewCell

... 

var imageView = UIImageView(image: self.eventImages[indexPath.row])
imageView.frame.size = cell.frame.size
cell.contentMode = UIViewContentMode.ScaleAspectFill
cell.clipsToBounds = true
imageView.contentMode = UIViewContentMode.ScaleAspectFill
imageView.clipsToBounds = true
cell.addSubview(imageView)

Le résultat est une image étirée (IMAGE A) , mais lorsque je clique sur (touchez) l'image, elle "résout comme par magie" le fond et le sous-affichage de l'aspect (IMAGE B) . Je n'arrive pas à comprendre pourquoi cela se produit seulement après un tapotement et pas lors du chargement des images pour la première fois. Ils sont récupérés de manière asynchrone sur un serveur, mais la mise à l'échelle ne se produit qu'après un tapotement de l'image (aucune fonctionnalité tap n'est également implémentée).

REMARQUE: UICollectionView est configuré dans un contrôleur de vue de storyboard. La vue Collection et la cellule réutilisable ont les sous-vues Remplissage et plan de l'aspect.

IMAGE A (mauvaise mise à l'échelle - étendue et pas de recadrage):

IMG A

IMAGE B (mise à l'échelle correcte après tapotement):

IMG B

10
Fdo

C'est très simple, faites ceci:

imageView.contentMode = UIViewContentMode.ScaleAspectFill;
imageView.layer.masksToBounds = YES;
13
Hic Up

Je pense que vous devriez utiliser:

imageView.contentMode = UIViewContentMode.ScaleAspectFill
imageView.clipsToBounds = true

au lieu de cela:

  cell.contentMode = UIViewContentMode.ScaleAspectFill
  cell.clipsToBounds = true
5
Lavvo

[yourImageView setContentMode: UIViewContentModeScaleAspectFill]; yourImageView.layer.masksToBounds = YES;

0
Reza.Ab