2017-08-21 11 views
0

私はUIImageViewでイメージをロードするために必要なs3リンクを持っています。私は私のイメージの次元を持っていません。私はコードではストーリーボードUIImageViewにイメージをロードしてコンテナのサイズを変更する - swift

にmainImageView(制約を先頭と末尾)を定義している、私が使用してイメージをロードしています:

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

は、我々は、画像のロード後にコンテナのサイズを変更するのいずれかの方法を持っていますか?私はコンテナに画像の大きさ(高さと幅)を取らせたい。私は同じことを達成するためにのコンテンツラップと呼ばれるものがあると聞きました。しかし、私はiOSで同等のものを見つけることができません。

答えて

0

あなたが画像のサイズにその枠を変更することで、画像のサイズを変更することができます

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

あなたが自動レイアウトを使用している場合は、それに応じて高さと幅の制​​限を変更したり、そのジョブにレイアウトを聞かせする必要があります。

2

Autolayoutを使用している場合、実際には画像の幅と高さになる固有のサイズのUIImageViewがあります。 .xibまたは.storyboardでは、イメージビューを位置(水平および垂直)で解決できるように、イメージビューを配置する必要があります。サイズについては、デフォルトのイメージを提供できます(ow autolayoutはエラーを表示します)。

イメージを実行時に変更すると、イメージビューのイメージのサイズが反映されます。

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); 
    } 
} 
関連する問題