【问题标题】:UIImageView image stretched even though contentMode = UIViewContentModeScaleAspectFit即使 contentMode = UIViewContentModeScaleAspectFit,UIImageView 图像也会被拉伸
【发布时间】:2013-01-23 17:42:43
【问题描述】:

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

【问题讨论】:

标签: uiimageview stretched


【解决方案1】:

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

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

【讨论】:

  • 这对我来说出乎意料.. 以前从未遇到过这个问题,但这次我将图像视图放在滚动视图中,可能与它有关.
  • 太傻了,改完内容模式后还得把imageView.frame = imageView.frame :/
  • 它对我有用,我被困在其中。谢谢 :) 我正在向滚动视图添加子视图,它的高度扭曲了
  • 如果我使用自动布局而不是框架怎么办?所有这些都在storyBoard中完成?
  • 这个答案根本不正确,顺序无关紧要。如果 contentMode 在代码中设置了两次,或者图像视图名称拼写错误(因此 contentMode 实际上设置在视图控制器中的另一个视图上),我应该仔细看看。
【解决方案2】:

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

有些图片也有奇怪的属性,会导致同样的问题。使用 Photoshop 将其转换为 PNG 总是可以的。

contentMode合作:

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

UIImageView 似乎根据CGImage 调整大小。

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

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

【讨论】:

  • 您应该包含“将 CIImage 渲染为 CGImage”的代码。这将使这成为一个非常有用的答案。
【解决方案3】:

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

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

【讨论】:

  • 我附上的图片是 Mac 截图,这就是为什么它们是 png。
  • 我附上的图片是 Mac 截图,这就是为什么它们是 png。我使用的原始图片是 iPhone 相机 JPG 图片。我使用 UIViewContentModeScaleAspectFit 因为我想在 UIImageView 中显示整个图片。当我在情节提要中执行此操作时,它工作正常,但当我在代码中创建 UIImageView 时,它的行为真的很奇怪。
  • 我在 iPhone 5 上运行了确切的代码,就在我的 viewDidLoad 中,它显示得很好。它很小,绿色部分扩大了整个屏幕,但它没有扭曲或任何东西
  • 我刚刚通过电子邮件将整个项目发送给了我的朋友,这样他就可以运行它并告诉我它的外观。如果它在他的 Xcode 中看起来不错,那么我的可能有问题。否则我会在某个地方发布这个项目,所以有人可以告诉那里有什么问题。顺便说一句:我如何分享这个 4MB Xcode 项目 zip 文件?
  • 你可以做一个免费的 gitHub repo
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    在我的情况下,我解决了这个问题,删除了一些 约束,它们会调整我错误设置的图像视图的大小。

    [更新]

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

    Xamarin IOS Doc

    【讨论】:

    • 我使用 Xamarin IOS 的这个解决方案,它与 C# 一起工作,但想法是一样的,它是关于删除 constraints 如果您正在寻找 xcode ios 代码例如试试这个:我没有测试过,但是你可以试试这个:[imageview.contentView removeConstraints:imageview.contentView.constraints];@ChrisSteele
    猜你喜欢
    • 1970-01-01
    • 2020-07-22
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多