在运行时设置图像时不考虑 UIImageView 的内容模式
UIImageView's contentmode not respected when setting image during runtime
我有一个 UIImageView
,全屏显示为 'background'。每当我将 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
已正确设置约束。使用自动布局,每个视图的大小由视图的 intrinsicContentSize
(link) 决定。这意味着当您重置 UIView
子类的内容时(无论是 UILabel
中的文本还是在本例中 UIImageView
中的图像,自动布局将计算新的大小。如果您没有设置适当的约束并将内容大小设置为大于当前框架大小,框架将会变大。
至于为什么即使您设置了 contentMode
和 clipsToBounds
也会发生这种情况,contentMode
似乎是在事后完成的,并且会在高度和宽度(您给它的高度和宽度,或者根据 X 和 Y 的相对约束计算出的高度和宽度)。 clipsToBounds
以相同的方式工作,它会在计算布局后裁剪框架边界之外的任何内容。在这种情况下,布局被计算并被认为比屏幕大,并相应地设置 UIImageView
的框架,这就是为什么你只看到照片的一小部分。
希望解释对您有所帮助!
我有一个 UIImageView
,全屏显示为 'background'。每当我将 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
已正确设置约束。使用自动布局,每个视图的大小由视图的 intrinsicContentSize
(link) 决定。这意味着当您重置 UIView
子类的内容时(无论是 UILabel
中的文本还是在本例中 UIImageView
中的图像,自动布局将计算新的大小。如果您没有设置适当的约束并将内容大小设置为大于当前框架大小,框架将会变大。
至于为什么即使您设置了 contentMode
和 clipsToBounds
也会发生这种情况,contentMode
似乎是在事后完成的,并且会在高度和宽度(您给它的高度和宽度,或者根据 X 和 Y 的相对约束计算出的高度和宽度)。 clipsToBounds
以相同的方式工作,它会在计算布局后裁剪框架边界之外的任何内容。在这种情况下,布局被计算并被认为比屏幕大,并相应地设置 UIImageView
的框架,这就是为什么你只看到照片的一小部分。
希望解释对您有所帮助!