即使contentMode = UIViewContentModeScaleAspectFit,UIImageView图像也会被拉伸

Mik*_*ike 13 uiimageview stretched

我对UIImageView显示图像的方式感到非常失望.

我有以下代码:

UIImageView *imgview = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 300, 100)];
imgview.image = [UIImage imageNamed:@"img.JPG"];
imgview.backgroundColor = [UIColor greenColor];
imgview.contentMode = UIViewContentModeScaleAspectFit;
[self.view addSubview:imgview];
Run Code Online (Sandbox Code Playgroud)

我得到的是以下截图:

http://img26.imageshack.us/img26/3686/screenshot20130123at629.png

[图像被拉伸到UIImageView的全宽,甚至没有占据全高]

原始图片:

http://img248.imageshack.us/img248/341/screenshot20130123at638.png

Jon*_*han 34

设置contentMode后必须设置大小

[imageView setContentMode: UIViewContentModeScaleAspectFit];
imageView.frame = CGRectMake(x, y, width, height);
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说令人惊讶.从来没有遇到过这个问题,但这次我把图像视图放在一个滚动视图中,*可能*与它有关. (2认同)

Bin*_*ian 7

我有同样的问题.在我的项目UIImage与创建imageWithCIImage:从不推崇contentModeUIImageView它插入.

有些图像也有奇怪的属性导致同样的问题.使用Photoshop 将其转换为PNG始终适用于它们.

与工作contentMode:

    CIImage * __strong ciImage = [CIImage imageWithContentsOfURL:url];
    _image = [UIImage imageWithCIImage:ciImage];
Run Code Online (Sandbox Code Playgroud)

UIImageView似乎要调整基础上的CGImage.

您需要将CIImage渲染为CGImage,而不是将其用作UIImage.这将适用于UIViewContentModeAspectFit.

例如createCGImage:fromRect:,或者CGImage从一开始就更好地使用a .


Tom*_*voy 1

我刚刚运行了它,你的代码工作正常。它可能与您指定 JPG 而实际上是 png 有关吗?

您还可以使用 UIViewContentModeScaleAspectFill,但请确保您的边界在视图限制内,否则外部可能会被剪裁