如何管理UIImageView的内容模式?

44

我有一个固定的UIImageView大小,但我的图片大小不固定。我想根据UIImageView的大小来显示图片。无论图像的分辨率是大还是小,都必须根据UIImageView的大小进行固定显示。我对如何使用以下资源感到困惑。

UIViewContentModeScaleToFill,
UIViewContentModeScaleAspectFit,
UIViewContentModeScaleAspectFill,
UIViewContentModeRedraw

自动调整大小掩码中应该设置什么?它们会如何表现?


为什么不使用上述提到的值进行检查?你可以轻松找到差异。 - Midhun MP
2
请查看此链接:https://dev59.com/QG445IYBdhLWcg3wXZO8 - Anusha Kottiyal
UIViewContentModeScaleAspectFill是UIImageView内容模式的一种属性。它将适配您的图像到UIIMageView矩形大小。 - fibnochi
7个回答

90
请尝试下面的代码,希望它能对你有用。 将 UIImageViewcontentMode 设置为 UIViewContentModeScaleAspectFill,如下所示:
imageView.contentMode = UIViewContentModeScaleAspectFill;

将UIImageView的autoresizingMask设置如下:

imageView.autoresizingMask =   
    ( UIViewAutoresizingFlexibleBottomMargin
    | UIViewAutoresizingFlexibleHeight
    | UIViewAutoresizingFlexibleLeftMargin
    | UIViewAutoresizingFlexibleRightMargin
    | UIViewAutoresizingFlexibleTopMargin
    | UIViewAutoresizingFlexibleWidth );

更新:UIViewContentMode.ScaleAspectFill 和 UIViewAutoresizing.FlexibleBottomMargin。 - helsont
有没有一种使用约束而不是遮罩来实现这个的方法?或者在启用约束的情况下,我在故事板上可以设置遮罩的位置? - halbano
2
我也将 clipsToBounds 属性设置为 YES; - maddy
Swift 5的更新? - Master AgentX

3
你只需要这两行代码:
imageView.contentMode = UIViewContentModeScaleAspectFill;
imageView.layer.clipsToBounds = YES; // Must do this or else image will overflow

2
谢谢!我的问题是ClipsToBounds。我将其设置为“NO”,以便在UIImageView周围显示阴影,但没有考虑到它也会让图像溢出。感谢您的提示。 - StoriKnow

2

这里提供一个针对Swift的解决方案:

let imageView = UIImageView(image: UIImage(named: "backgroundImage"))
imageView.frame = tableView.frame
imageView.contentMode = .ScaleAspectFill
tableView.backgroundView = imageView

1
如果您想让您的UIImageView按比例调整大小,则必须将其模式设置为UIViewContentModeScaleAspectFit
 yourimage.contentMode=UIViewContentModeScaleAspectFit;

请告诉我它是否正常工作!!!

编码愉快。


不,它不起作用。图像没有覆盖整个UIImageView的区域。 - DipakSonara
是的,它不会覆盖整个UIImageview区域,因为它将根据比例设置您的图像,因此会根据比例留下一些空白区域。因此,您将获得无模糊的图像并获得清晰的图像。所以您想要覆盖整个UIImageview区域吗? - NiravPatel

1

在 Swift 中,您也可以设置内容模式

var newImgThumb : UIImageView
newImgThumb = UIImageView(frame:CGRectMake(0, 0, 100, 70))
newImgThumb.contentMode = .ScaleAspectFit

1
值得注意的是,Swift 3 已经做出了以下更改:
- ScaleAspectFit 改为 scaleAspectFit - ScaleAspectFill 改为 scaleAspectFill

0
希望这对你有所帮助
CGImageRef imageRef = CGImageCreateWithImageInRect([largeImage CGImage], cropRect);

image = [UIImage imageWithCGImage:imageRef]];

CGImageRelease(imageRef);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接