Der Weg dies zu tun, ist die Inhalte der UIImageView Schicht zu ändern. Der folgende Code aus meinem Projekt (Unterklasse von UIImageView) setzt scaleToFill voraus und versetzt das Bild so, dass es oben, unten, links oder rechts anstelle der standardmäßigen Mittelausrichtung ausgerichtet ist. Für AspectFit wäre eine ähnliche Lösung.
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;
}
Ich weiß, das ist alt, aber diese Lösung ist toll für Leute, die diesen Thread wie ich gefunden: https://github.com/reydanro/UIImageViewAligned – tommybananas