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.
C'est très simple, faites ceci:
imageView.contentMode = UIViewContentMode.ScaleAspectFill;
imageView.layer.masksToBounds = YES;
Je pense que vous devriez utiliser:
imageView.contentMode = UIViewContentMode.ScaleAspectFill
imageView.clipsToBounds = true
au lieu de cela:
cell.contentMode = UIViewContentMode.ScaleAspectFill
cell.clipsToBounds = true
[yourImageView setContentMode: UIViewContentModeScaleAspectFill]; yourImageView.layer.masksToBounds = YES;