UIImageView 不会以编程方式更改尺寸
Posted
技术标签:
【中文标题】UIImageView 不会以编程方式更改尺寸【英文标题】:UIImageView doesn't change dimensions programmatically 【发布时间】:2014-08-10 22:49:34 【问题描述】:我应该如何以编程方式调整 Storyboard 文件中创建的 UIImageView 的尺寸以匹配特定图像的尺寸?将 UIImageView 的 frame 或 bounds 设置为所选图像的 frame 或 bounds 不会改变 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 添加任何约束。这可能是问题的根源吗?
【问题讨论】:
图片视图的内容模式是什么?您是否尝试过设置父视图的 view.clipsToBounds = YES? 您确定XIB中的ImageView已经正确连接到IBOutlet了吗? 我试过selectedImage.clipsToBounds=YES;
和selectedImage.contentMode=UIViewContentModeScaleAspectFit;
,但似乎都没有任何效果。我假设 imageView 连接正确,因为 Storyboard 显示了 selectedImage
和 Referencing Outlets
下的 ViewController 之间的连接,并且 ViewController.h
中 selectedImage
旁边的圆圈是阴影。
【参考方案1】:
我的项目目前正在使用 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 中收到缺少约束的错误。
【讨论】:
以上是关于UIImageView 不会以编程方式更改尺寸的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式更改使用自动布局在情节提要上创建的 UIImageView 的大小?
如何以编程方式自动旋转UIScrollView和UIImageView?
以编程方式更改 UIImageView Xcode Swift 的高度和宽度