UIImageView无法以编程方式更改维度

时间:2014-08-10 22:49:35

标签: ios uiimageview uiimage autolayout

我应该如何以编程方式调整在Storyboard文件中创建的UIImageView的尺寸以匹配特定图像的尺寸?将UIImageView的框架或边界设置为所选图像的框架或边界不会改变Xcode iOS模拟器中imageView的大小。我已经看过许多其他类似的问题并尝试了他们的答案,但他们给出的修复程序似乎都没有用到目前为止。

以下是用于尝试调整UIImageView大小的代码:

-(void)viewWillAppear:(BOOL)animated{
    //Get selected image
    UIImage *selectedImage=[UIImage imageNamed:selectedItem.pictureName];

    //Set imageView's image to selected image
    imageView.image=selectedImage;

    //Make new frame with dimensions of selected image and same origin
    CGRect newImageViewFrame=CGRectMake(imageView.frame.origin.x,imageView.frame.origin.y,selectedImage.size.width,selectedImage.size.height);

    //Set imageView's frame to match that of the newly created frame
    imageView.frame=newImageViewFrame;

    [super viewWillAppear:animated];
}

imageView正确调整大小的唯一方法是将静态imageView替换为以编程方式创建的imageView,以匹配selectedImage的框架。从头开始创建一个新的UIImageView时,这应该是有用的,但在尝试调整现有UIImageView的大小时却不行。

我的项目当前正在使用AutoLayout,但我没有向相对的UIImageView添加任何约束。这可能是问题的来源吗?

1 个答案:

答案 0 :(得分:2)

  

我的项目当前正在使用AutoLayout,但我没有向相对的UIImageView添加任何约束。这可能是问题的来源吗?

是。如果不指定约束,则会自动获得“固定帧”约束。图像视图的约束如下所示:

<NSIBPrototypingLayoutConstraint:0x7f95a943bad0 'IB auto generated at build time for view with fixed frame' H:|-(87)-[UIImageView:0x7f95a9b112b0](LTR)   (Names: '|':UIView:0x7f95a974e7c0 )>,
<NSIBPrototypingLayoutConstraint:0x7f95a943bfe0 'IB auto generated at build time for view with fixed frame' V:|-(217.5)-[UIImageView:0x7f95a9b112b0]   (Names: '|':UIView:0x7f95a974e7c0 )>,
<NSIBPrototypingLayoutConstraint:0x7f95a943c030 'IB auto generated at build time for view with fixed frame' H:[UIImageView:0x7f95a9b112b0(146)]>,
<NSIBPrototypingLayoutConstraint:0x7f95a943c080 'IB auto generated at build time for view with fixed frame' V:[UIImageView:0x7f95a9b112b0(132)]>,

因此,当重新应用固定帧约束时,您尝试修改帧将被覆盖。

您需要做的是建立水平和垂直位置约束。执行此操作后,您将不再获得固定帧约束。由于您没有约束大小,因此将由intrinsicContentSize属性确定,该属性将是图像的大小。

还有一个细节是,如果您没有在故事板中设置图像,则需要在Size Inspector中指定占位符内在内容大小,否则您将在IB中找到缺少的约束错误。