在运行时设置图像时,UIImageView的内容模式不受尊重

时间:2015-01-08 04:52:12

标签: ios objective-c cocoa-touch uiimageview

我有一个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如何失去对财产的尊重?

1 个答案:

答案 0 :(得分:5)

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

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

希望这个解释有所帮助!