我有一个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如何失去对财产的尊重?
答案 0 :(得分:5)
确保UIImageView
已正确设置约束。使用自动布局,每个视图的大小由视图intrinsicContentSize
(link)决定。这意味着当您重置UIView
的子类的内容时(如果是UILabel
中的文本,或者在这种情况下,UIImageView
中的图像,自动布局将计算新的大小。如果您没有设置适当的约束并将内容大小设置为大于当前帧大小,则帧将增长。
即使您设置了contentMode
和clipsToBounds
,为什么会发生这种情况,contentMode
似乎是在事后完成的,并且会使用高度和宽度的约束(您给它的高度和宽度,或者从X和Y的相对约束计算的高度和宽度)。 clipsToBounds
以相同的方式工作,它会在计算布局后剪切框架边界之外的任何内容。在这种情况下,计算布局并认为布局大于屏幕,并相应地设置UIImageView
的框架,这就是为什么你只看到了一小部分照片。
希望这个解释有所帮助!