如何使用固定宽度和自动布局正确缩放图像?

Posted

技术标签:

【中文标题】如何使用固定宽度和自动布局正确缩放图像?【英文标题】:How do i scale an image correctly with fixed width and auto layout? 【发布时间】:2013-12-13 21:23:59 【问题描述】:

我有一个动态 UIImage 和一个固定宽度为 280.0px 的 UIImageView,我正在使用自动布局。在 UIImage 视图上,我设置了宽度和高度约束并降低了高度约束的优先级。我选择了“aspect fit”,并将内容拥抱和压缩优先级提高到 1000。 在这种情况下, UIImageView 会调整大小以保持比例,但高度比我想要的要大。由于 UIImageView 的顶部和底部有空白区域,因此保留了纵横比。我想删除这些空格并自动调整高度以完全适合 UIImage。

【问题讨论】:

【参考方案1】:

这样的……

UIImage *image = ...;
UIImageView *imageView = ...;

imageView.image = image;
float ar = image.size.width/image.size.height;

NSLayoutConstraint* aspectConstraint = [NSLayoutConstraint constraintWithItem: imageView
                                                         attribute: NSLayoutAttributeWidth
                                                         relatedBy: NSLayoutRelationEqual
                                                            toItem: imageView
                                                         attribute: NSLayoutAttributeHeight
                                                        multiplier: ar
                                                          constant: 0];

[parentView addConstraint: aspectConstraint];

【讨论】:

谢谢!你的答案是对的。我已经用这种方法解决了,但是使用约束的视觉格式 这个答案完美而简单【参考方案2】:

我已经解决了:

-(CGFloat) scaleImageAutoLayout:(UIImageView *)imageView withWidth:(CGFloat)width

    CGFloat scale = width/imageView.image.size.width;
    CGFloat height = imageView.image.size.height * scale;
    NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(imageView);
    [imageView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString     stringWithFormat:@"V:[imageView(%f)]",ceilf(height)]
                                                                  options:0 metrics:nil    views:viewsDictionary]];
    return height;

【讨论】:

以上是关于如何使用固定宽度和自动布局正确缩放图像?的主要内容,如果未能解决你的问题,请参考以下文章

仅在自动布局中具有固定宽度的垂直滚动视图

如何以编程方式将 UIImageView 缩放到固定宽度和灵活高度?

如何正确裁剪图像以适合 imageview

在滚动视图中使用自动布局缩放图像如何居中?

如何使用自动布局动态调整具有固定宽度的collectionview单元格高度?

IOS 8 图像缩放和自动布局