Comment puis-je utiliser UIImageView avec aspectFill et l'alignment vers le haut?

Comment pourrais-je utiliser UIImageView avec aspectFill et l'alignment vers le haut? Auto-layout ou par programme ne me dérange pas.

Cela peut être fait, mais vous parlez d'un peu de encoding. Commençons par une description détaillée de ce que vous requestz.

Nous allons commencer avec un iPhone6s en mode portrait avec une taille d'écran de 667×375 points, ou une hauteur régulière par largeur compressée dans les classs de taille.

(Gardez à l'esprit, sur n'importe quel iPad, vous aurez également besoin de travailler avec des diapositives et écran partagé aussi.)

Mais pour l'instant nous irons avec 667×375. Dans ce cas, nous appendons notre imageView en format carré de 375×375. En haut de l'écran en mode portrait.

(Gardez à l'esprit qu'avec AutoLayout vous l'aurez également épinglé, et sans mettre de code pour déterminer s'il est en mode paysage ou portrait, sinon, 375×375 rétrécira en mode paysage si vous avez d'autres vues en dessous.)

Alors maintenant, dépouillé au minimum (pour l'instant), nous parlons de comment épingler "une image" au sumt d'un UIImageView qui est de 375×375 et avec un contentMode de aspectFill.

Nous devons ensuite find la taille de l'image, en fonction à la fois de la plus grande dimension (hauteur ou largeur) ET de la façon dont cette dimension se compare à la taille de l'imageView, calculer comment elle sera normalement rendue. Le chiffre key que vous voulez est la hauteur, il le rendra comme

Par exemple, comment une image 480×1020 (HxW) va-t-elle s'y intégrer? La largeur de 1020 sera ramenée à 375, donc la hauteur sera 480 / (1020375) ou 176.4705 points.

Faites toujours le calcul pour les deux dimensions – si votre imageView n'est pas carrée ou si la hauteur n'est pas la dimension "bounded", vous serez éteints.

Une fois que vous avez calculé la hauteur "Aspect rempli", vérifiez-la par rapport aux dimensions de l'imageView et ajustez-la au besoin.

Voici où le vrai travail entre en jeu. Si vous utilisez AutoLayout, vous pouvez faire un ajustement heightAnchor, mais en fonction de la façon dont vous avez épinglé ces autres vues, les choses peuvent être très mauvaises après. Si vous utilisez des frameworks et des CGRects, sachez que vous devez prendre en count l'iPad coulissant et l'écran partagé, etc.

Enfin, si vous voulez que votre application charge une image différente dans cette image après son chargement, vous devrez "réinitialiser" la hauteur à ce qu'elle était à l'origine, au less dans vos calculs.

Ma recommandation est de find une alternative à ce que vous requestz. Par exemple, placez une petite bordure autour de l'image pour indiquer à l'user les vraies dimensions de cette vue.