2015-01-15 17 views
16

UIImageViewは、画像のサイズを正しく表示しません。 Scale Aspect Fitを使用すると、UIImageViewが正方形である場合、画像は、画像が塗りつぶされない領域で透明な正しいアスペクト比になります。Swift UIImageView伸ばしたアスペクト

//Image is Square & Correct Size 
var imageView = UIImageView(frame: CGRectMake(0, 50, 320, 320)) 
imageView.clipsToBounds = true 
imageView.contentMode = UIViewContentMode.ScaleAspectFit 

//Image is Rectangle & Incorrect Size 
var imageView = UIImageView(frame: CGRectMake(0, 50, 320, 450)) 
imageView.clipsToBounds = true 
imageView.contentMode = UIViewContentMode.ScaleAspectFit 

UIImageViewは、画面の上部と下部の縁に触れ透明空間を有する必要があり、画像は内部むしろ高く延伸よりも、元の比率を維持する必要があります。私は、UIImageView内の画像のレンダリング方法について2つの画像を添付しました。 UIViewContentMode.ScaleAspectFitのための意図した行動だ

ImageView with correct Aspect ImageView with wrong Aspect

答えて

30

私はUIImageViewに自動サイズ変更用のマスクを追加し、正しい比率を表示するようになりました。

imageView.autoresizingMask = UIViewAutoresizing.FlexibleBottomMargin | UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleRightMargin | UIViewAutoresizing.FlexibleLeftMargin | UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleWidth 
imageView.contentMode = UIViewContentMode.ScaleAspectFit 

この答えは私を助け:Captured photo is stretched with AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto私は携帯電話のカメラを通して撮影された画像を使用していたとして。

+4

Swift 3コード: imageView.autoresizingMask = [。フレキシブルトップマージン、.flexibleHeight、.flexibleRightMargin、。flexibleLeftMargin、.flexibleTopMargin、.flexibleWidth] – Markymark

+1

@george Groverこの回答は古くて、親切に更新してください。 –

5

UIViewContentModeScaleAspectFit

アスペクト比を維持することによって、ビューの サイズに合わせてコンテンツを拡大縮小するためのオプション:ドキュメントから。 残りのビューの境界の の領域はすべて透明です。

それはあなたがUIViewContentMode.ScaleAspectFill

UIViewContentModeScaleAspectFill

ビューのサイズを埋める にコンテンツを拡張するためのオプションが必要であることを説明したものからそうです。コンテンツの一部は、ビューの境界を埋めるためにクリップされて になることがあります。

+0

は、私は、例えばボックスに収まるように画像が欲しいですボックスが大きくなると、側面がエッジに接触し、上部と下部に透明なスペースが残ります。 ScaleAspectFillはこの結果を出すことはありませんが、上下には触れないように強制する方法はどうでしょうか? –

+0

そうですね、私は、あなたが透明性を望んでいないと言っていると思っていました。申し訳ありませんが、私はあなたを誤解しました。 – Cezar

+0

申し訳ありませんが、私は自分自身を正しく説明していませんでした。イメージが水平ではなく垂直に成長する理由について、あなたは何か考えていますか? –

9

私は同じ問題を抱えていましたが、私のために修正したのは、コンテンツモードが設定された後で確実にimageViewイメージを設定することでした。すなわち:

self.imageView.contentMode = UIViewContentMode.ScaleAspectFit 
    self.imageView.image = imageChosen 

乾杯

13

あなたのコードのスウィフト3バージョン:

imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleBottomMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleTopMargin] 
imageView.contentMode = .scaleAspectFit // OR .scaleAspectFill 
imageView.clipsToBounds = true 
関連する問題