我有一个 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 怎么能像这样失去对属性的尊重?
最佳答案
确保 UIImageView
已正确设置约束。使用自动布局,每个 View 的大小由 View 的intrinsicContentSize
决定。 (link) .这意味着当您重置 UIView
的子类的内容时(无论是 UILabel
中的文本,还是在这种情况下为 UIImageView
中的图像,自动布局将计算新大小。如果您没有设置适当的约束并设置大于当前的内容大小帧大小,帧会变大。
至于为什么会发生这种情况,即使您正在设置 contentMode
和 clipsToBounds
, contentMode
似乎是事后完成的,并且将使用高度和宽度的约束(您给它的高度和宽度,或者根据 X 和 Y 的相对约束计算的高度和宽度)。 clipsToBounds
以相同的方式工作,在计算布局后,它将剪裁框架边界之外的任何内容。在这种情况下,布局计算并认为大于屏幕,并设置UIImageView
的框架因此,这就是为什么您只看到一小部分照片的原因。
希望这个解释有帮助!
关于ios - 在运行时设置图像时不遵守 UIImageView 的内容模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27833182/