L'alignement UIImageView avec le format d'Ajustement
pour mon UIImageView-je choisir l'Aspect de l'Ajustement (InterfaceBuilder) mais comment puis-je modifier l'alignement vertical?
- essayez avec en haut et en bas de la propriété de l'imageview
- Ne fonctionne pas lorsque vous avez Aspect de l'Ajustement ensemble.
- Il y a un projet sur GitHub appelé UIImageViewAligned qui fait cela à la perfection.
Vous devez vous connecter pour publier un commentaire.
[EDIT - ce code est un peu moisi être, à partir de 2011 et tout, mais j'ai incorporé @ArtOfWarefare de mods]
Vous ne pouvez pas faire ce w/UIImageView. J'ai créé un simple sous-classe UIView
MyImageView
qui contient une UIImageView. Le Code ci-dessous.et
initWithCoder
(en gros, j'ai copié votreinitWithFrame
mais ils ont remplacé les[super initWithFrame:]
avec[super initWithCoder:]
) et 2 - j'ai ajouté une ligneif (!self.image) return;
àlayoutSubviews
afin qu'il ne tombe pas en panne avec une géométrie non valide si une image n'est pas affectée lorsqu'elle est appelée. Avec ces deux petites modifications, il fonctionne étonnamment bien.dealloc
méthode doit être retiré.Si vous utilisez des story-boards ceci peut être réalisé avec des contraintes...
Tout d'abord, une UIView avec l'image finale souhaitée /contraintes. Ajouter une UIImageView à la UIView. Définir la contentMode à l'Aspect de Remplissage. Faire de la UIImageView cadre être le même que le ratio de l'image (ce qui évite toute Storyboard mises en garde plus tard). Épinglez les côtés de la UIView en utilisant la norme de contraintes. Pin le haut OU le bas (selon l'endroit où vous voulez qu'il aligné) à la UIView en utilisant la norme de contraintes. Enfin, ajoutez un ratio d'aspect de la contrainte à la UIImageView (faire en sorte que le ratio de l'image).
C'est un peu délicat car il n'y a pas d'option pour régler la poursuite de l'alignement des règles si vous avez déjà sélectionné un mode de contenu (
.scaleAspectFit
).Mais voici une solution de contournement:
D'abord besoin de redimensionner votre image source explicitement par le calcul des dimensions (si il serais en
UIImageView
aveccontentMode = .scaleAspectFit
).Ensuite, il vous suffit d'appeler cette fonction sur votre image d'origine en passant votre imageView du cadre et affecter le résultat à votre
UIImageView.image
de la propriété. Aussi, assurez-vous de définir votre imageView souhaitécontentMode
ici (ou même dans Interface Builder)!Essayez de définir:
Cela a fonctionné pour moi.
J'ai utilisé UIImageViewAligned pour modifier l'alignement de l'image grâce à des développeurs
UIImageViewAligned
Je sais que c'est un vieux thread, mais j'ai pensé que je devais partager ce que j'ai fait pour changer facilement la région écrêtée à partir du haut vers le bas de l'affichage de l'image dans Interface Builder, au cas où quelqu'un avait le même problème, je l'ai fait. J'ai eu une UIImageView qui a rempli la Vue de mon ViewController, et a été d'essayer de faire un top de rester le même, indépendamment de la taille de l'écran de l'appareil.
J'ai appliqué la rétine 4 facteur de forme (Éditeur->Appliquer Retina de 4 Facteur de Forme).
J'ai épinglé la hauteur et la largeur.
Maintenant, lorsque l'écran change de taille, le UIImageView est en fait la même taille, et la vue-contrôleur des clips de ce qui est hors de l'écran. L'image d'origine reste à 0,0, de sorte que le bas et à droite de l'image sont coupées, pas le top.
Espère que cette aide.
Vous pouvez le faire d'ici la première mise à l'échelle et ensuite le transformer.
La chose à mentionner ici est que j'ai été conditionnée par la hauteur. Je veux dire , j'ai eu l'image de 34px élevé et peu importe combien de largeur.
Ainsi , obtenir le rapport entre le contenu réel de la hauteur et la hauteur de la vue ( 34 px ) et ensuite à l'échelle de la largeur de trop.
Voici comment je l'ai fait:
Espère que cette aide.
Je suis venu à la solution suivante:
UIImageView
mode de contenu pourtop
:imageView.contentMode = .top
De charge et de redimensionnement de l'image-je utiliser Kingfisher:
J'ai résolu ce problème en sous-classement UIImageView et en remplaçant la setImage: la méthode. La sous-classe serait d'abord stocker ses valeurs d'origine de l'origine et de la taille de sorte qu'il pourrait utiliser le jeu d'origine taille de la boîte englobante.
J'ai mis le mode de contenu pour UIViewContentModeAspectFit. À l'intérieur de setImage: j'ai attrapé la largeur de l'image à la hauteur de ratio et puis redimensionné l'image vue à tenir le même que le ratio de l'image. Après le redimensionnement, j'ai ajusté mon propriétés de cadre pour définir l'affichage de l'image sur le même endroit, c'était avant, et puis j'ai appelé le super setImage:.
Il en résulte un affichage de l'image qui est ajustée pour s'adapter exactement à l'image, donc l'aspect ajustement des œuvres et de l'image à afficher les propriétés sont en train de faire le gros du travail en mettant l'affichage de l'image où il devrait être d'obtenir le même effet.
Voici un code que j'ai utilisé:
D'abord, et je le trouve assez utile en général, est une catégorie sur UIView qui le rend facile de définir les propriétés du cadre sur une vue via les propriétés comme la gauche, la droite, le haut, le bas, la largeur, la hauteur, etc.
UIImageView+FrameAdditions
C'est la sous-classe de UIImageView. Il n'est pas complètement testé, mais doit obtenir l'idée à travers. Ce pourrait être élargie à l'ensemble de vos propres nouveaux modes d'alignement.
BottomCenteredImageView
Si vous avez besoin pour réaliser aspectFit et de se débarrasser des espaces vides
Ne pas oublier d'enlever la largeur de la contrainte de votre imageview de storyboard et de profiter de
classe SelfSizedImageView :UIImageView {
Pour aligner une échelle d'ajustement du traitement de l'image mise en page automatique. Exemple aligné à droite de l'image après l'échelle d'ajustement en UIImageView:
Votre aspect ajustement de l'échelle de l'image est maintenant aligné à droite dans la UIImageView
Modifier les contraintes d'aligner différemment au sein de l'imageview.