ios - 在运行时设置图像时不遵守 UIImageView 的内容模式

标签 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 怎么能像这样失去对属性的尊重?

最佳答案

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

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

希望这个解释有帮助!

关于ios - 在运行时设置图像时不遵守 UIImageView 的内容模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27833182/

相关文章:

ios - ipad中的下拉框

ios - UICollectionView performBatchUpdates 捕获异常

objective-c - 将 NSDate 从日历转换为另一个日历

iphone - 核心数据重构

objective-c - 如何测量两个 CLLocations 之间的距离(以米为单位)?

ios - 自定义 iOS 开关切换

ios - 是否有任何用 C/C++ 编写的开源 EGL 测试套件?

ios - 如何使用 Xcode 跟踪哪个项目增加了 iOS 中的内存?

iphone - 通过 GameKit 登录 iPhone 应用程序

ios - iPhone NSDateFormatter转换字符串