2017-01-03 87 views
1

我想在單元格中顯示圖像,因爲我需要首先下載它,所以我想顯示(爲了簡化問題),應該顯示與圖像相同寬度和高度的黑色視圖。如何在UITableViewCell中調整UIImageView的大小?

因爲我想將圖像拉伸到與單元格寬度相同的寬度,所以我只需要高寬比來設置高度,當我調用cellForRowAt時,這是在我的代碼中提供的。

我決定在下載圖像之前實現「黑色視圖」我只需要一個具有黑色背景的UIImageView,並在調用cellForRowAt時調整它的大小。但是,這是問題,因爲使用來自類似問題的代碼不適合我。

我想這樣的事情在cellForRowAt方法:

var frame cell.imageView.frame 
frame.size.height = CGFloat(aspectRatio) * frame.size.width 
cell.imageView.frame = frame 

編輯

因此,我想要的東西,如Facebook,在那裏我們有照片有相同的寬度細胞和高度相應地長寬比。爲了簡單,單元格只能有UIImageView。

+0

你使用自動佈局嗎? –

+0

是的,我正在使用自動佈局 – Tajnero

+0

那麼,爲什麼你以編程方式做到這一點? –

回答

-1

這裏我的解決方案

imageView.contentMode = UIViewContentModeCenter; 
if (imageView.bounds.size.width > ((UIImage*)imagesArray[i]).size.width && imageView.bounds.size.height > ((UIImage*)imagesArray[i]).size.height) { 
     imageView.contentMode = UIViewContentMode.ScaleAspectFit; 
} 
+0

這個問題被標記爲「迅速」,而不是「objective-c」。請始終尊重問題的標籤。您應該改爲發佈Swift版本。 – Moritz

0

由於您使用的自動佈局,在故事板應設置兩件事情:

  • 首先,設置UIImageView的寬度爲全寬
  • 第二,將的的縱橫比設置爲1:1 - 這表示高度總是與寬度相同。

如果您使用的是UITableView自動尺寸細胞的高度,這應該是你所需要的;沒有任何地方的代碼,一切都是正常的。

如果你不使用自動細胞高度功能,那麼要麼self.tableView.rowHeight = self.tableView.bounds.size.width設置單元格高度一次,如果他們都是一樣的,或者,如果該細胞可以具有不同的高度:

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 

    if (<indexPath IS IMAGE ROW>) 
     return tableView.bounds.size.width 
    return <default height> 
} 

在我寫過<indexPath IS IMAGE ROW>的地方,你應該用任何你需要檢測的條件來替換它,以檢測這個特定單元格是否是圖像類型。 此外,作爲Rikh指出的那樣,在那裏我已經寫<default height>,你應該替換與被圖像類型細胞的高度。 當然,您的桌子可能有更復雜的設計;這只是涵蓋你所問的案例。

+0

謝謝格式化編輯,Rikh:我在急着打字:-) – IanW

+0

沒問題!但我認爲你應該看看你的'heightForRow',如果代碼沒有進入'if'條件,應該有一個默認的返回類型:) – Rikh

+1

同樣好的調用 - 我能說什麼,它已經很長了天:-) – IanW