繁体   English   中英

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

[英]Load an image in UIImageView and resize the container - swift

我有一个s3链接,通过它我需要在UIImageView中加载图像。 我没有图像的尺寸。 我在情节提要板中定义了mainImageView(前后约束)

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

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

加载图像后,我们是否可以调整容器的大小? 我希望容器采用图像的尺寸(高度和宽度)。 我听说Android中有一种称为Content wrap的东西可以实现相同的目的。 但是,我在iOS中找不到等效项。

如果您使用的是“自动布局”,则实际上不必做太多事情,因为UIImageView具有固有的大小,可以容纳图像的宽度和高度。 在.xib或.storyboard中,您需要定位图像视图,以便它可以解析其位置(水平和垂直)。 对于尺寸,您可以提供默认图像(自动版式会显示错误)。

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

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

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

如果使用的是“自动布局”,则需要相应地修改高度和宽度约束,或者让布局开始工作。

您可以使用以下方法实现它:

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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM