在UIImageView中加载图像并调整容器大小 - swift

时间:2017-08-21 11:44:37

标签: ios swift uiimageview nsurl

我有一个s3链接,我需要在UIImageView中加载图像。我没有像我这样的图像尺寸。我在故事板中定义了mainImageView(前导和尾随约束)

在代码中,我使用以下方法加载图像:

mainImageView.setImageWith(URL(string: ("https:" + (content?.imagePath)!)), placeholderImage: nil)

图像加载后,我们是否有办法调整容器的大小?我希望容器采用图像的尺寸(高度和宽度)。我听说在Android中有一些叫做 内容包装 的东西也是如此。但是,我无法在iOS中找到相应的内容。

3 个答案:

答案 0 :(得分:2)

如果你正在使用Autolayout,你实际上不必做太多,因为UIImageView具有内在大小,这使得它占据图像的宽度和高度。在.xib或.storyboard中,您需要定位图像视图,以便它可以解析其位置(水平和垂直)。对于大小,您可以提供默认图像(ow autolayout将显示错误)。

当您在运行时更改图像时,图像视图将采用其图像的大小。

答案 1 :(得分:0)

您可以通过将图像修改为图像的大小来调整图像大小:

mainImageView.frame = CGRect(origin: mainImageView.frame.origin, size: mainImageView.image.size)

如果您使用自动布局,则需要相应地修改高度和宽度约束,或让布局完成其工作。

答案 2 :(得分:0)

您可以使用以下方式实现:

imgView.frame = [self frameForImage:self.image inImageViewAspectFit:imgView];

功能实现:

-(CGRect)frameForImage:(UIImage*)image inImageViewAspectFit:(UIImageView*)imageView
{
    float imageRatio = image.size.width / image.size.height;
    float viewRatio = imageView.frame.size.width / imageView.frame.size.height;
    if(imageRatio < viewRatio) {
        float scale = imageView.frame.size.height / image.size.height;
        float width = scale * image.size.width;
        float topLeftX = (imageView.frame.size.width - width) * 0.5;
        return CGRectMake(topLeftX, 0, width, imageView.frame.size.height);
    } else {
        float scale = imageView.frame.size.width / image.size.width;
        float height = scale * image.size.height;
        float topLeftY = (imageView.frame.size.height - height) * 0.5;
        return CGRectMake(0, topLeftY, imageView.frame.size.width, height);
    }
}