在运行时设置图像时不遵守UIImageView的contentmode

bdv*_*bdv 1 cocoa-touch objective-c uiimageview ios

我有一个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];

}
Run Code Online (Sandbox Code Playgroud)

contentMode失去对照片的所有尊重,并且在拍摄照片时仅显示照片的一小部分。像这样,UIImageView如何失去对属性的尊重?

rya*_*ils 5

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

至于为什么会发生这种情况,即使您设置了contentModeclipsToBounds,也contentMode似乎是在事实之后完成的,并且将在高度和宽度的约束下工作(您给定的高度和宽度,或者根据相对高度计算出的高度和宽度)对X和Y的约束)。clipsToBounds以相同的方式工作,在计算布局后,它将裁剪框架范围之外的所有内容。在这种情况下,计算出的布局被认为比屏幕大,并UIImageView据此设置边框,这就是为什么您只看到照片的一小部分的原因。

希望这种解释有所帮助!