2017-01-16 66 views
0

我試圖創建一個包含主圖像(Content Mode = Aspect Fit)和其他各種對象的表單元。我已將此圖像視圖固定到左右邊緣,並給它600的高度限制(有希望),以確保所提供的設備的寬度不會扭曲照片。Swift 3:根據圖像高度垂直壓縮ImageView

但是,我目前的實施不允許我這樣做,而不會在設備上喪失相當數量的垂直房地產;所以我的問題如下:

如何修剪任何不用於照片的垂直多餘空間?

請注意,這是發生在xib表格單元格;所以我還需要正確配置tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat功能。 (除非這是可以做到一些其他的方式)

編輯:我改變了高度約束< = 600,但空格還是一樣

我XIB可以看到下面:


TableViewCell Xib


得到的屏幕快照可以在下面與可愛的艾瑪·沃特森可以看出(請注意多餘空白區域):


enter image description here


回答

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你也許可以把它放在一個公共方法,並調用它,每當圖像設置(包括細胞resuse)當父視圖控制器調用viewDidLayoutSubviews時。

此外,爲了使單元格高度正常工作,最好確保從最底層視圖到底層視圖(單元格contentView)有一個約束,並使用UITableViewAutomaticDimension

+0

非常感謝你,在玩弄約束條件(並以編程方式設置高度約束)後,我能夠使它工作 –