20

我已经用 IB 在我的视图上放置了一个 UIImageView 控件。控件的大小只是我决定的,非常随机的大小我想要做的是控件在我将图像属性设置为新图像时自动调整大小。我希望它实际调整为图像的大小。可以自动完成吗?没有任何代码干预?如果不是 - 在这种情况下最好的方法是什么?

今天发生的事情很奇怪。我将图像加载到 ImageView 中,即使 ImageView 的大小没有改变,我也看到图像正确显示。这干扰了我在 ImageView 上抓取用户触摸的意图。用户触摸实际图像,但由于图像的某些部分在 ImageView 的外部(这是奇怪的部分)-点映射变得疯狂有人能想到任何解释吗?

谢谢

4

3 回答 3

27

图像的大小与 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”,图像将始终填满包含视图的整个边界.

于 2012-09-29T07:13:47.980 回答
1

这是我经常剪切和粘贴的代码片段,使用与上面的 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;
}

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

于 2018-02-03T20:28:12.513 回答
0

让 containerView = UIView(frame: CGRect(x:0,y:0,width:320,height:500)) 让 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)
    }
}
于 2020-12-29T17:54:42.537 回答