堆棧溢出問題已經有這麼多的答案,請知道我看過,但所有的解決方案都不適合我。我在單元格中有兩個UILabels,一個有確定的寬度和高度,另一個是動態的,我把寬度大約爲< = 250,高度> = 50。我還設置所有四個邊距內容視圖,然後我嘗試以下兩種方法來獲取字符串的高度:如何使用UILabel的高度正確地增加UITableViewCell
var context: NSStringDrawingContext = NSStringDrawingContext()
context.minimumScaleFactor = 0.8
cell?.body.text = msg.body
var width: CGFloat = (cell?.body.frame.size.width)!
width = ((UIScreen.main.bounds.width)/320)*width
let size: CGSize = (cell?.body.text!.boundingRect(with: CGSize(width: width, height: 2000), options:NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSFontAttributeName: cell?.body.font], context: context).size)!
print("size.height is \(size.height)")
return size.height
而且這種方法:
var optimalHeight : CGFloat
{
get
{
let label = UILabel(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: CGFloat.greatestFiniteMagnitude))
//let label = UILabel(frame: CGRectMake(0, 0, self.frame.width, CGFloat.greatestFiniteMagnitude))
label.numberOfLines = 0
label.lineBreakMode = self.lineBreakMode
label.font = self.font
label.text = self.text
label.sizeToFit()
return label.frame.height
}
}
,併爲這兩個,附帶的圖像就像UILabel所顯示的那樣,正如任何人都能看到的那樣,它是離開的。
我也嘗試在estimatedHeightForRowAt和heightForRowAt方法中實現UITableViewAutomaticDimension,但是這行不通,兩行之後,它不會進一步擴展。 我打過電話estimatedRowHeight和rowHeight在viewDidLoad中()方法是這樣的:
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 300 //even went as far as using 800
同樣的事情,停止後2線擴大。 我也看到了一些關於實現這些方法的東西:
tableView.setNeedsLayout()
tableView.layoutIfNeeded()
但什麼也沒有!我已經瀏覽了raywenderlich教程以及更多內容。我不知道我做錯了什麼。這可能是一個重複的問題,但我向你保證我已經嘗試了所有的解決方案,而且沒有任何對我有用。請有人看看這個,看看我做錯了什麼?
爲什麼不使用自動佈局?這就是你正在省略的「正確」部分。此功能(單元格自動將其內容自動調整爲其內容)是關於autolayout_的_all。 – matt
@matt你是什麼意思?我最近開始學習快速,所以請你進一步解釋一下?這篇文章(https://www.appcoda.com/auto-layout-guide/)只是將自動佈局解釋爲具有約束條件,而我已經有了約束條件?還是有更多的呢? – Aria
要使自動行高度起作用,必須通過視圖和約束從單元格頂部到底部有一條路徑。標籤是單元格中唯一的東西嗎?它是否受到頂部和底部的限制? – Connor