UIImageViewは、イメージのサイズを正しくレンダリングしません。 Scale Aspect Fitを使用して、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つの画像を添付しました。
UIImageViewに自動サイズ変更マスクを追加すると、正しい比率が表示されるようになりました。
imageView.autoresizingMask = UIViewAutoresizing.FlexibleBottomMargin | UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleRightMargin | UIViewAutoresizing.FlexibleLeftMargin | UIViewAutoresizing.FlexibleTopMargin | UIViewAutoresizing.FlexibleWidth
imageView.contentMode = UIViewContentMode.ScaleAspectFit
この答えは私を助けました: キャプチャされた写真はAVCaptureSession sessionPreset = AVCaptureSessionPresetPhotoで引き伸ばされます 私は携帯電話のカメラを通して撮影された画像を使用していました。
Swiftコードのバージョン:
imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight, .flexibleBottomMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleTopMargin]
imageView.contentMode = .scaleAspectFit // OR .scaleAspectFill
imageView.clipsToBounds = true
私は同じ問題を抱えていましたが、それを修正したのは、コンテンツモードが設定された後にimageViewイメージを設定することでした。すなわち:
self.imageView.contentMode = UIViewContentMode.ScaleAspectFit
self.imageView.image = imageChosen
乾杯
これは、UIViewContentMode.ScaleAspectFit
の意図された動作です。ドキュメントから:
UIViewContentModeScaleAspectFit
アスペクト比を維持して、ビューのサイズに合わせてコンテンツを拡大縮小するオプション。 ビューの境界の残りの領域は透明です。
あなたが説明することから、あなたはUIViewContentMode.ScaleAspectFill
が必要だと思われます
UIViewContentModeScaleAspectFill
ビューのサイズに合わせてコンテンツを拡大縮小するオプション。コンテンツの一部は、ビューの境界を埋めるためにクリップされる場合があります。
素晴らしい解決策があります here: by olearyj234 。
それは私を大いに助けてくれました。ご覧になることをお勧めします。また、ここに彼のコードSwift 4およびXcode 9.2:
class ScaledHeightImageView: UIImageView {
override var intrinsicContentSize: CGSize {
if let myImage = self.image {
let myImageWidth = myImage.size.width
let myImageHeight = myImage.size.height
let myViewWidth = self.frame.size.width
let ratio = myViewWidth/myImageWidth
let scaledHeight = myImageHeight * ratio
return CGSize(width: myViewWidth, height: scaledHeight)
}
return CGSize(width: -1.0, height: -1.0)
}
}