[英]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.