web-dev-qa-db-ja.com

UIImageView内で画像が伸びないようにする方法は?

フレームサイズをx = 0, y = 0, width = 404, height = 712に設定したUIImageViewがあります。私のプロジェクトでは、UIImageViewの画像を動的に変更する必要があります。

私はこのコードを使用して画像を変更しています:

self.imageView.image = [UIImage imageNamed:@"setting-image.png"];

問題は、*.png画像サイズがUIImageViewフレームサイズよりも小さい場合、画像が伸縮することです。伸びたくありません。それを行う方法はありますか?

65
R. Dewi

使用できます

self.imageView.contentMode = UIViewContentModeScaleAspectFit;

スウィフト3:

imageView.contentMode = .scaleAspectFit

またはUIViewContentModeCenter/.center、または IViewドキュメント で説明されているその他のモード。

135
jtbandes

ClipsToBoundsをUIViewContentModeScaleAspectFit contentModeと組み合わせて設定することが、私にとってのトリックでした。それが誰かを助けることを願っています!

imageView.clipsToBounds = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
11
Tyler Kidd

contentMode プロパティを使用します。おそらくUIViewContentModeScaleAspectFitまたはUIViewContentModeCenterが必要でしょう。

5
Anomie

インターフェイスビルダー内で、UIImageのモードを「拡大縮小」から「中央」に変更します。画像が必要な正確なサイズであることを確認してください。

enter image description here

4
Declan McKenna

画像が伸びず、画像ビューの中央に配置されるように、画像の幅と高さとしてCGSizeを設定する必要があります。

- (UIImage *)imageWithImage:(UIImage *)image scaledToFillSize:(CGSize)size
{
    CGFloat scale = MAX(size.width/image.size.width, size.height/image.size.height);
    CGFloat width = image.size.width * scale;
    CGFloat height = image.size.height * scale;
    CGRect imageRect = CGRectMake((size.width - width)/2.0f,
                                  (size.height - height)/2.0f,
                                  width,
                                  height);

    UIGraphicsBeginImageContextWithOptions(size, NO, 0);
    [image drawInRect:imageRect];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}
4

Swift 3:の更新

imageView.contentMode = .scaleAspectFit
3
transistor

ContentModeを変更します。例:

imageView.contentMode = UIViewContentModeScaleAspectFit;
2

画像の元のサイズの使用方法-ストレッチなし

  • インターフェースビルダー内でUIImageのモードをscale to fillからAspect Fitに変更するだけです。

enter image description here

2
Megaetron

UIImageViewにこれを使用します

imageView.contentMode = UIViewContentModeScaleAspectFill;

スペースを取得せず、スケールを保持します。ただし、画像の一部は切り取られます。

次を使用する場合:

imageView.contentMode = UIViewContentModeScaleAspectFit;

いくらかの空きスペースがありますが、スケールは保持されます。

1

画像がimageivewよりも大きい場合でもストレッチ

Swift

    let qCodeImage = UIImage(named: "qcode-placeholder.png")!      
    let qCodeImageView = UIImageView(frame: CGRectMake(0, 0, CGRectGetWidth(cardView.frame)-30, CGRectGetWidth(cardView.frame)-30))
    qCodeImageView.image = qCodeImage
    qCodeImageView.clipsToBounds = true
    qCodeImageView.contentMode = UIViewContentMode.ScaleToFill
    qCodeImageView.center = cardView.center
0
Daniel Long