【问题标题】:UIImageView's contentmode not respected when setting image during runtime在运行时设置图像时不遵守 UIImageView 的内容模式
【发布时间】:2015-03-06 03:47:16
【问题描述】:

我有一个UIImageView,它全屏显示为“背景”。每当我将viewdidload 中的图像设置为默认值时,contentMode 就可以正常工作。

但是,当我这样做时:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info  {
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    self.pickedPhotoImageView.contentMode = UIViewContentModeScaleAspectFit; // set desired contentMode here
    self.pickedPhotoImageView.clipsToBounds = YES;

    self.pickedPhoto = image;
    [self.pickedPhotoImageView setImage:image];
    [self dismissViewControllerAnimated:YES completion:nil];

}

contentMode 的所有尊重都消失了,拍照时只显示了一小部分照片。 UIImageView 怎么会像这样失去对属性的尊重?

【问题讨论】:

  • 设置新图片后尝试设置内容模式。
  • 不,也不起作用..我也在 viewdidload 中设置它。每次设置新照片后设置 contentMode 是否常见?
  • 你在 UIImageView 上设置了约束吗?我想知道 imageView 是否由于设置了更大的图像而增长。您可以检查的一种方法是在设置图像后使用 Xcode 6 中的“调试视图层次结构”。
  • 甜,就是这样!谢谢@ryanwils。如果您回答我的问题,我会将其标记为正确。您能否在答案中解释为什么在添加大图片时它会调整大小,即使我已经将它剪裁到边界并设置 contentMode?​​span>
  • 很高兴听到它成功了!我在下面添加了我的答案。干杯!

标签: ios objective-c cocoa-touch uiimageview


【解决方案1】:

确保UIImageView 已正确设置约束。使用自动布局,每个视图的大小由视图的intrinsicContentSize(link) 决定。这意味着当您重置UIView 的子类的内容时(无论是UILabel 中的文本还是在这种情况下,UIImageView 中的图像,自动布局将计算新的大小。如果您没有适当的约束设置并设置一个大于当前帧大小的内容大小,帧将会增长。

至于为什么会发生这种情况,即使您设置了 contentModeclipsToBoundscontentMode 似乎是事后完成的,并且将在高度和宽度的约束下工作(您的高度和宽度给出它,或者从 X 和 Y 的相对约束中计算出的高度和宽度)。 clipsToBounds 以相同的方式工作,在计算布局后,它将剪裁框架边界之外的任何内容。在这种情况下,布局被计算并认为大于屏幕,并相应地设置UIImageView的框架,这就是为什么你只看到了一小部分照片。

希望这个解释会有所帮助!

【讨论】:

  • 在偶然发现这个答案之前,我花了太多时间。所以非常感谢。对于面临此类问题的其他任何人,通常会在情节提要中有插座时发生,然后通过代码进行更改,同时还从服务器下载图像。
猜你喜欢
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-30
相关资源
最近更新 更多