Il modo per fare ciò è modificare il contenuto Rect del livello UIImageView. Il seguente codice dal mio progetto (sottoclasse di UIImageView) presuppone scaleToFill e sposta l'immagine in modo tale che si allinea in alto, in basso, a sinistra o a destra invece dell'allineamento centrale predefinito. Per aspectFit sarebbe una soluzione simile.
typedef NS_OPTIONS(NSUInteger, AHTImageAlignmentMode) {
AHTImageAlignmentModeCenter = 0,
AHTImageAlignmentModeLeft = 1 << 0,
AHTImageAlignmentModeRight = 1 << 1,
AHTImageAlignmentModeTop = 1 << 2,
AHTImageAlignmentModeBottom = 1 << 3,
AHTImageAlignmentModeDefault = AHTImageAlignmentModeCenter,
};
- (void)updateImageViewContentsRect {
CGRect imageViewContentsRect = CGRectMake(0, 0, 1, 1);
if (self.image.size.height > 0 && self.bounds.size.height > 0) {
CGRect imageViewBounds = self.bounds;
CGSize imageSize = self.image.size;
CGFloat imageViewFactor = imageViewBounds.size.width/imageViewBounds.size.height;
CGFloat imageFactor = imageSize.width/imageSize.height;
if (imageFactor > imageViewFactor) {
//Image is wider than the view, so height will match
CGFloat scaledImageWidth = imageViewBounds.size.height * imageFactor;
CGFloat xOffset = 0.0;
if (BM_CONTAINS_BIT(self.alignmentMode, AHTImageAlignmentModeLeft)) {
xOffset = -(scaledImageWidth - imageViewBounds.size.width)/2;
} else if (BM_CONTAINS_BIT(self.alignmentMode, AHTImageAlignmentModeRight)) {
xOffset = (scaledImageWidth - imageViewBounds.size.width)/2;
}
imageViewContentsRect.origin.x = (xOffset/scaledImageWidth);
} else if (imageFactor < imageViewFactor) {
CGFloat scaledImageHeight = imageViewBounds.size.width/imageFactor;
CGFloat yOffset = 0.0;
if (BM_CONTAINS_BIT(self.alignmentMode, AHTImageAlignmentModeTop)) {
yOffset = -(scaledImageHeight - imageViewBounds.size.height)/2;
} else if (BM_CONTAINS_BIT(self.alignmentMode, AHTImageAlignmentModeBottom)) {
yOffset = (scaledImageHeight - imageViewBounds.size.height)/2;
}
imageViewContentsRect.origin.y = (yOffset/scaledImageHeight);
}
}
self.layer.contentsRect = imageViewContentsRect;
}
fonte
2016-07-21 11:07:03
So che questo è vecchio ma questa soluzione è fantastica per le persone che trovano questo thread come ho fatto io: https://github.com/reydanro/UIImageViewAligned – tommybananas