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

时间:2013-01-23 17:42:44

标签: 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];

我得到的是以下屏幕截图:

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

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

原始图片:

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

4 个答案:

答案 0 :(得分:34)

设置尺寸必须在设置contentMode

后进行
[imageView setContentMode: UIViewContentModeScaleAspectFit];
imageView.frame = CGRectMake(x, y, width, height);

答案 1 :(得分:7)

我遇到了同样的问题。在我的项目中,使用UIImage创建的imageWithCIImage:从未尊重其插入的contentMode UIImageView

某些图片也有奇怪的属性导致同样的问题。使用Photoshop将其转换为 PNG 始终可以使用它们。

使用contentMode

    CIImage * __strong ciImage = [CIImage imageWithContentsOfURL:url];
    _image = [UIImage imageWithCIImage:ciImage];

UIImageView似乎根据CGImage调整大小。

您需要将CIImage渲染为CGImage,并且可以将其用作UIImage。这适用于UIViewContentModeAspectFit

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

答案 2 :(得分:0)

这是一个愚蠢的人,所以我为此感到骄傲。最重要的是我最终在这个SO帖子上认为contentMode = UIViewContentModeScaleAspectFit被打破了,实际上真正被打破的是我对结果的期望。我在方形视图中使用方形图像,因此Fit和Fill具有完全相同的效果。当我无法让它在广场内宽屏时,我就像个婴儿一样哭。

答案 3 :(得分:0)

就我而言,我解决了这个问题,删除了一些约束来调整我错误设置的图像视图。

<强> [UPDATE]

“尺寸约束”是相对于另一个视图制作尺寸的尺寸约束。

Xamarin IOS Doc