13

我对 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

5 回答 5

35

设置大小必须在设置 contentMode 之后发生

[imageView setContentMode: UIViewContentModeScaleAspectFit];
imageView.frame = CGRectMake(x, y, width, height);
于 2013-09-16T18:40:36.000 回答
7

我有同样的问题。在我的项目中,一个从未尊重过它被插入的项目中UIImage创建。imageWithCIImage:contentModeUIImageView

一些图像也确实具有导致相同问题的奇怪属性。使用 Photoshop将其转换为PNG始终对它们有效。

使用contentMode

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

UIImageView似乎根据CGImage.

您需要将 CIImage 渲染为 CGImage,然后可以将其用作 UIImage。这将与UIViewContentModeAspectFit.

使用 example createCGImage:fromRect:,或者最好CGImage从一开始就使用 a 。

于 2014-03-20T11:05:43.540 回答
1

我刚刚运行它,您的代码运行良好。当它实际上是png时,它可能与您指定JPG有关吗?

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

于 2013-01-23T19:46:07.410 回答
0

这是一个愚蠢的人,如此愚蠢,我为此感到自豪。底线是我最终在这篇 SO 帖子上认为 contentMode = UIViewContentModeScaleAspectFit 被破坏了,而实际上真正被破坏的是我对结果的期望。我在方形视图中处理方形图像,因此 Fit 和 Fill 具有完全相同的效果。当我无法让它坐在广场内的宽屏上时,我哭得像个婴儿。

于 2014-11-08T15:37:47.650 回答
0

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

[更新]

它是“尺寸约束”,它使尺寸相对于另一个视图。

Xamarin IOS 文档

于 2016-06-17T16:31:01.380 回答