簡體   English   中英

如何讓 UIImageView 自動調整到加載圖片的大小

[英]How to make UIImageView automatically resize to the size of the image loaded

我用 IB 在我的視圖上放置了一個 UIImageView 控件。 控件的大小只是我決定的,非常隨機的大小我想要做的是每當我將圖像屬性設置為新圖像時自動調整大小的控件。 我希望它實際調整到圖像的大小。 可以自動完成嗎? 沒有任何代碼干預? 如果不是 - 在這種情況下最好的方法是什么?

今天發生的事情很奇怪。 我將圖像加載到 ImageView 中,即使 ImageView 的大小沒有改變,我也看到圖像得到正確顯示。 這干擾了我抓住用戶觸摸 ImageView 的意圖。 用戶觸摸實際圖像,但由於圖像的某些部分在 ImageView 之外(這是奇怪的部分)-點映射變得瘋狂有人能想到對此的任何解釋嗎?

謝謝

圖像的大小與 UIImageView 的實際大小無關,而 UIImageView 的大小僅取決於 Interface Builder 中給定的大小(或您分配給它的大小)。 否則,例如,當您將 @2x 圖像用於 Retina 顯示器時,圖像會很奇怪。

如果要解決此問題,還必須在設置圖像時更改框架。 如果你現在這樣做:

[imageView setImage:[UIImage imageNamed:@"myImage.jpg"]];

將其更改為:

UIImage img = [UIImage imageNamed:@"myImage.jpg"];
[imageView setImage:img];
imageView.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y,
                             img.size.width, img.size.height);

然而,這不會改變它所包含的視圖布局,您可以使用布局約束使其在 iOS 6 下自動更改其他視圖的大小。 如果您是 Apple 開發人員,您可以觀看 WWDC 說明視頻,它們解釋了該系統如何工作得很好。

如果您對視圖沒有增長感到滿意,並且問題在於當您將其更改為與包含視圖的尺寸不匹配的圖像時圖像如何溢出其邊界,您可以在界面中設置“剪輯子視圖”復選框圖像視圖的構建器。 這將使視圖不會在其自己的邊界框之外繪制任何內容,如果您還將縮放模式設置為“Aspect Fill”或“Scale To Fill”,則圖像將始終填充包含視圖的整個邊界.

這是我經常剪切和粘貼的代碼片段,使用與上面的 Hampus Nilsson 相同的方法 -

例子

func demo(x0:CGFloat, y0:CGFloat) {
    let imgView = UIImageView(image: UIImage(named: "someImg.png"));
    imgView.sizeToImage();
    imgView.center = CGPoint(x:x0, y:y0);
}

UIImageView 擴展

extension UIImageView {

/******************************************************************************/
/** @fcn        sizeToImage()
 *  @brief      size view to image
 *  @@assum     (image!=nil)
 */
/******************************************************************************/
func sizeToImage() {

    //Grab loc
    let xC = self.center.x;
    let yC = self.center.y;

    //Size to fit
    self.frame  = CGRect (x: 0, y: 0, width: (self.image?.size.width)!/2, height: (self.image?.size.height)!/2);

    //Move to loc
    self.center = CGPoint(x:xC, y:yC);

    return;
}

一個美妙的剪切和粘貼,如果需要使用!

let containerView = UIView(frame: CGRect(x:0,y:0,width:320,height:500)) let imageView = UIImageView()

if let image = UIImage(named: "Image_Name_Here") {
    let ratio = image.size.width / image.size.height
    if containerView.frame.width > containerView.frame.height {
        let newHeight = containerView.frame.width / ratio
        imageView.frame.size = CGSize(width: containerView.frame.width, height: newHeight)
    }
    else{
        let newWidth = containerView.frame.height * ratio
        imageView.frame.size = CGSize(width: newWidth, height: containerView.frame.height)
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM