Swift 3:根据图像高度垂直压缩ImageView

时间:2017-01-16 09:41:03

标签: ios xcode swift3

我正在尝试创建一个包含主图像(Content Mode = Aspect Fit)和各种其他对象的表格单元格。我已将此imageView固定到左右边距,并给它一个600的高度约束(希望)确保使用所提供设备的宽度而不会扭曲照片。

但是,我目前的实施不允许我这样做而不会丢失设备上相当数量的垂直空间;所以我的问题如下:

如何修剪未用于照片的任何垂直多余空间?

请注意,这是在xib表格单元格中进行的;所以我还需要正确配置tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat功能。 (除非可以通过其他方式完成)

编辑:我将高度限制更改为< = 600,但空格仍然相同

我的XIB如下所示:

TableViewCell Xib

下面可以看到结果截图,可爱的Emma Watson(请注意不需要的空白区域):

enter image description here

1 个答案:

答案 0 :(得分:2)

您可能需要手动计算宽高比并设置高度。仅设置contentMode将导致图像在imageView内缩放,但不会调整imageView的大小。

以下是:

您需要图像视图和高度约束的属性,以及最大高度的常量(kMaxImageHeight)。

    guard let image = self.imageView.image else {
        return
    }

    let imageHeight = image.size.height;
    let aspect = imageHeight / image.size.width;

    // Constrain max height
    if (imageHeight > kMaxImageHeight && aspect > 1.0) {
        self.imageViewHeightConstraint.constant = kMaxImageHeight;

    } else {
        // Otherwise calculate aspect and set height manually
        self.imageViewHeightConstraint.constant = aspect * self.imageView.frame.size.width;
    }

在UIViewController中,您可以简单地将此代码放在viewDidLayoutSubviews方法中,但由于您使用的是UITableViewCell,因此您可以将其置于公共方法中并在设置图像时调用它(包括在单元格重用上)当父视图控制器调用viewDidLayoutSubviews时。

此外,要使单元格高度正常工作,最好确保从最底层视图到超级视图底部(单元格内容视图)有约束并使用UITableViewAutomaticDimension