2015-03-30 127 views
2

我在定製表格單元格中有兩個UILabel s,每個在Interface Builder中將「Lines」設置爲「0」。它們垂直堆疊,左右邊緣對齊,位於表格中,行高由自動佈局確定。但他們中的一個堅持截斷無論如何。爲什麼?它應該佔用所需的線並推出表格單元格的高度。如何停止在UITableCellView中使用'...'截斷UILabel

enter image description here

+0

我可以建議你包括你使用你的問題的代碼?如果不瞭解產生該結果的代碼,就很難提供幫助。 – smileBot 2015-04-18 01:50:57

+0

曾經有一個被接受的答案涵蓋所有問題? – noobsmcgoobs 2015-10-02 03:42:53

回答

1

嘗試調用[cell.textLabel sizeToFit] 將根據其內容調整LABELVIEW。

+0

我把它放在了幾個地方,比如'viewDidLayoutSubviews'。我可以讓它顯示第二行,但單元格不會像應該那樣高度增長。所以第二個標籤的第二行重疊到下一個單元格中。 – 2015-03-30 20:22:54

5

您需要確保您設置了UILabelpreferredMaxLayoutWidth。 iOS8應該爲你做到這一點,但我也有自定義動態大小UITableViewCell s時被截斷的問題。解決方法是將preferredMaxLayoutWidthlayoutSubviews)設置爲標籤的寬度。

+0

好吧,那只是工作,但我用硬編碼300,或單元格寬度。在更復雜的佈局......我堅持做自動佈局應該做的計算,來計算'preferredMaxLayoutWidth'的這個值? – 2015-03-31 16:24:01

+0

我一直在尋找它,你可以在layoutSubviews中設置preferredMaxLayoutWidth。我會將其添加到我的答案。 – ABakerSmith 2015-03-31 16:28:05

+0

'layoutSubviews'哪個類?我把它放在控制器的'viewDidLayoutSubviews'中,但標籤的寬度在這裏是錯誤的 - 它是574,但整個屏幕只有320. – 2015-03-31 16:46:03

0

,達到自動細胞大小,你需要確保你有以下(考慮到你正在使用自動佈局)

  1. 確保你的意見有限制之最終接觸細胞邊緣,在你因爲您只有一個標籤,所以您可以將頂部,左側,右側和底部的間距設置爲0到所有邊緣。
  2. 確保您的tableView的estimatedRowHeight屬性設置爲一個值,它可能是tableView.estimatedRowHeight = 44例如
  3. 確保您設置的tableView的rowHeight屬性來UITableViewAutomaticDimension在viewDidLoad中
  4. 確保您的標籤以0作爲數行

這樣,您的單元格將根據需要增長,您應該能夠正確地看到您的標籤。

感謝

+0

是的,我做了所有這些事情。 – 2015-03-31 16:12:34

+2

在tableview數據源中執行'func tableView(tableView:UITableView,cellForRowAtIndexPath indexPath:NSIndexPath) - > UITableViewCell'方法之前,嘗試調用'cell.layoutIfNeeded()'。 – batkru 2015-04-08 12:35:14

+0

這對我有用!非常感謝你! – 2015-08-27 07:10:58

0

layoutSubviews細胞和viewDidLayoutSubviews不起作用。您需要爲單元格使用自定義容器視圖,並在容器layoutSubviews中設置preferredMaxLayoutWidth。我有特殊的子類的UIView

類ExtendedView:使用例如

的UIView {

var didLayoutSubviews:(()->Void)!; 

override func layoutSubviews() { 
    super.layoutSubviews(); 
    if let completion = didLayoutSubviews { 
     completion(); 
     layoutIfNeeded(); 
    } 
} 

}

container.didLayoutSubviews = {[unowned self] in 
    let left = self.statusLabel.frame.minX - 4; 
    width = left - self.title.frame.minX; 
    self.title.preferredMaxLayoutWidth = round(width) 
    container.layoutIfNeeded() 
}