2013-08-27 98 views
3

我在UITableViewCell中有3個標籤,並且設置了標籤,以便它們可以進行字符封裝。如果他們自動換行,文本會進入下一個單元格。如何讓AutoLayout根據內容擴展單元而不必在heightForRowAtIndex方法中編寫代碼?沒有一個約束可以用來根據contentView自動調整單元格嗎?讓UITableViewCell使用自動佈局調整自身格式

enter image description here enter image description here

細胞看起來不錯,如果文本沒有在標籤包裹。一旦它出現問題,並且我希望將單元格調整爲適合內容,並且底部標籤和底部之間的間距與頂部和頂部標籤之間的間距相同。

回答

2

不幸的是,你不能這樣做。表格視圖首先計算其自身的總高度,並且在加載時對每個單元格的大小有一個固定的概念,它不會從外部確定它的高度,也不會讓佈局約束條件改變單元格的高度。

如果你仔細想想表是如何工作的,與細胞再利用,那麼你就無法真正從大小的細胞表而不加載於每個細胞並將其添加到滾動視圖,並執行對整個事情的佈局傳遞。這可能會導致相當差的表現。

在計算heightForRow時,您可以嘗試填充「空閒」單元格(即剛剛實例化的單元格,而不是添加到表格)並將其放在數據源中的每一行。

+0

我自己使用一個自由單元格。但最好用一些單元格,或者如果您自己管理表格視圖中的單元格數量。 – Abizern

+0

當你說空閒單元你意味着在代碼中創建它?所以我想我需要做'label1.size.height + label2.size.height + label3.size.height + topPadding + bottomPadding',那將是單元格的高度?或者我是否需要爲每個單元格執行constraintToSize? – Bot

+0

我的意思是,在代碼中創建一個單元格,填充它並調用[layoutIfNeeded]來確定大小。如果您的約束設置正確,那麼這應該計算顯示您的內容所需的單元格的確切大小。 – jrturton

0

當您在加載單個單元格時,在填充標籤之後,但在加載單元格實例之前,請檢查標籤高度。

Something like: 
    cell.frame.size.height 

如果高度足夠大,以至於您知道標籤已包裝爲兩行,則請增加要加載的單元格的高度。