2011-08-12 91 views
58

我有一個UIImageView其中我已將幀大小設置爲x = 0, y = 0, width = 404, height = 712。 在我的項目中,我需要動態更改UIImageView中的圖像。如何阻止在UIImageView內拉伸圖像?

我使用這個代碼來改變圖像:

self.imageView.image = [UIImage imageNamed:@"setting-image.png"]; 

的問題是,當圖像*.png尺寸比UIImageView幀的大小,圖像的延伸更小。我不想讓它伸展。有沒有辦法做到這一點?

回答

120

可以使用

self.imageView.contentMode = UIViewContentModeScaleAspectFit; 

夫特3:

imageView.contentMode = .scaleAspectFit 

UIViewContentModeCenter或者/ .center,或者任何在the UIView documentation描述的其它模式。

+0

感謝您的回答,但使用模式方面適合做太多下面的一些圖像的位置,所以我把它變成左上角的模式,謝謝你的建議我使用它,最後,我已經得到了答案:) –

5

使用contentMode屬性。您可能需要UIViewContentModeScaleAspectFitUIViewContentModeCenter

2

更改contentMode,例如:

imageView.contentMode = UIViewContentModeScaleAspectFit; 
4

更改的UIImage的模式從「規模,以填補」到「中心」的界面生成器內。確保您的圖片是您需要的確切尺寸。

enter image description here

10

與UIViewContentModeScaleAspectFit contentMode組合設置clipsToBounds是什麼做的把戲我。希望能幫助別人!

imageView.clipsToBounds = YES; 
imageView.contentMode = UIViewContentModeScaleAspectFit; 
+0

Storyboard上的「clipsToBounds」複選標記和「contentMode」作爲「AspectFill」在Xcode 8中爲我工作 – KingChintz

1

如何使用圖像的原始大小 - 沒有任何拉伸

  • 接口生成器內scale to fill只要改變的UIImage的模式爲Aspect Fit

enter image description here

0

仍然伸展時,圖像比imageivew

迅速做大

let qCodeImage = UIImage(named: "qcode-placeholder.png")!  
    let qCodeImageView = UIImageView(frame: CGRectMake(0, 0, CGRectGetWidth(cardView.frame)-30, CGRectGetWidth(cardView.frame)-30)) 
    qCodeImageView.image = qCodeImage 
    qCodeImageView.clipsToBounds = true 
    qCodeImageView.contentMode = UIViewContentMode.ScaleToFill 
    qCodeImageView.center = cardView.center 
1

使用此爲您UIImageView

imageView.contentMode = UIViewContentModeScaleAspectFill; 

你不會得到任何水療並保留了規模。但是,圖像的某些部分將被剪掉。

如果您使用以下命令:

imageView.contentMode = UIViewContentModeScaleAspectFit; 

會有一些空的空間,但規模被保留。

3

你必須設置CGSize作爲你的圖像寬度和高度,所以圖像不會伸展,它會安排在imageview的中間。

- (UIImage *)imageWithImage:(UIImage *)image scaledToFillSize:(CGSize)size 
{ 
    CGFloat scale = MAX(size.width/image.size.width, size.height/image.size.height); 
    CGFloat width = image.size.width * scale; 
    CGFloat height = image.size.height * scale; 
    CGRect imageRect = CGRectMake((size.width - width)/2.0f, 
            (size.height - height)/2.0f, 
            width, 
            height); 

    UIGraphicsBeginImageContextWithOptions(size, NO, 0); 
    [image drawInRect:imageRect]; 
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return newImage; 
} 
3

更新斯威夫特3:

imageView.contentMode = .scaleAspectFit