【问题标题】:How do I programmatically change an image in an existing UIImageView and make it fit inside the image view's constraints?如何以编程方式更改现有 UIImageView 中的图像并使其适合图像视图的约束?
【发布时间】:2015-01-24 21:36:50
【问题描述】:

我有一个 UIImageView,当我使用 IB 在该视图中设置图像时,当我运行应用程序 (40x40) 时,图像的大小是正确的。当我使用下面的代码以编程方式更改图像时,新图像是 400x400 左右。这是使用相同的图像,如果它在 IB 中设置,我知道它可以正常工作。在将图像添加到 UIImageView 之前是否必须缩放图像?我假设自动布局的约束会自动为我做这件事。

UIImage *messageTypeImage = [UIImage imageNamed:message.imageName];
[messageCell.imageView setImage:messageTypeImage];
[messageCell.contentView layoutIfNeeded];

UIImageView 的内容模式设置为“缩放填充”,我尝试在调用 setImage 之前和之后添加以下代码:

[messageCell.imageView setContentMode:UIViewContentModeScaleAspectFill];
[messageCell.imageView setClipsToBounds:YES];

以下是为图像视图设置约束的方式:

【问题讨论】:

  • 你可以试试[messageCell layoutIfNeeded];
  • Jessamaphone,感谢您的建议,但我已经在致电 [messageCell.contentView layoutIfNeeded];我已经更新了问题以反映这一点。
  • 你查看Mode(即contentMode)的值是多少?按比例填充?
  • 你在IB的imageView上设置了哪些约束?你有宽度和高度限制吗?还是对 imageView 的所有四个方面都有限制?
  • 那么,您的图像在屏幕上显示为大于 40x40?

标签: objective-c uiimageview uiimage interface-builder autolayout


【解决方案1】:

您使用的是 iOS 8 SDK 吗?如果是这样,请尝试在您的单元子类中覆盖 layoutSubviews 并添加:

   self.contentView.frame = self.bounds;
   self.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

集合视图/表格视图单元格约束/掩码的 contentViews 存在一些问题。

【讨论】:

    【解决方案2】:

    哇。终于找到答案here。原来,原型单元中有一个默认的 imageView 出口。我在不知不觉中使用了那个插座,而不是我认为我正在使用的 UIImageView。

    【讨论】:

      猜你喜欢
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      • 2016-04-22
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多