2012-10-03 107 views
4

我有一個UIImageView與內容模式方面適合大小爲220x155。我以不同的分辨率動態插入不同的圖像,但都大於UIImageView的大小。當內容模式設置爲Aspect Fit時,圖像將根據比例進行縮放以適合UIImageView。如何在頂部設置圖像以避免空間在UIimageView

我的問題是,如果例如UIImageView內的圖像縮放到220x100,我想UIImageView從155的高度縮小到100,以避免我的元素之間的空間。

我該怎麼做?

回答

2

我寫了這個方法來獲取圖像視圖的框架,一旦它加載圖像。 所以,對我的要求是一樣的,你的情況:

1)方面的圖像視圖適合內容模式 2)獲得圖像的準確的幀(這樣你就可以重新定位圖像視圖)

希望這有助於:

- (CGRect) getFrameOfImage:(AsyncImageView *) imgView 
{ 
    if(!imgView.loaded) 
     return CGRectZero; 

    CGSize imgSize  = imgView.image.size; 
    CGSize frameSize = imgView.frame.size; 

    CGRect resultFrame; 

    if(imgSize.width < frameSize.width && imgSize.height < frameSize.height) 
    { 
     resultFrame.size = imgSize; 
    } 
    else 
    { 
     float widthRatio = imgSize.width/frameSize.width; 
     float heightRatio = imgSize.height/frameSize.height; 

     float maxRatio = MAX (widthRatio , heightRatio); 
     NSLog(@"widthRatio = %.2f , heightRatio = %.2f , maxRatio = %.2f" , widthRatio , heightRatio , maxRatio); 

     resultFrame.size = CGSizeMake(imgSize.width/maxRatio, imgSize.height/maxRatio); 
    } 

    resultFrame.origin = CGPointMake(imgView.center.x - resultFrame.size.width/2 , imgView.center.y - resultFrame.size.height/2); 

    return resultFrame; 
} 

我在這裏使用AsyncImageView,但它的作用與UIImageView好。要記住的重要一點是在圖像加載後調用此方法。

乾杯!

+0

非常感謝@George。這是非常好的答案,我已經將resultframe的y更改爲靜態文本。 – Hiren

0

將imageview的圖像設置爲新圖像(並縮放)後,可以在imageview(imageview.image.size.height)中獲取圖像的高度,並相應地設置imageview的高度(frame)。

+0

此外,您應該在layoutSubviews方法中設置您的視圖,並在動態調整imageview的高度後調用[self setNeedsLayout] – user1264577

1

它非常簡單,你只需要獲得圖像的實際大小,這可以通過

UIImage *image = [UIImage imageName:@""]; 

,那麼你只需要設置框架 像這樣做: -

imageView.frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height); 

希望這有助於您。

+0

謝謝,但這不會幫助我,因爲圖像很大,我已將屬性設置爲方面適合,尺寸太大 – Hiren

+0

您可以將一個尺寸修復作爲常量並進行比較,如果超過該尺寸,那麼您應該縮小尺寸並使尺寸與該修正尺寸相同。希望它可以幫助你.. –

相關問題