有幾種方法這樣做,但我發現最可靠的是使用臨時和不可見的UITextView來獲得必要的大小。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
//Ideally you should do lazy loading so that instead of creating a new textView each time, you just reuse the same one.
UITextView *temp = [[UITextView alloc] initWithFrame:CGRectMake(0, 0, self.tableView.frame.size.width, 44)]; //This initial size doesn't matter
temp.font = __Your_desired_font__
temp.text = @"Put your status here";
CGFloat textViewWidth = __your_constraint_width__
CGRect tempFrame = CGRectMake(0,0,textViewWidth,44); //The height of this frame doesn't matter.
CGSize tvsize = [temp sizeThatFits:CGSizeMake(tempFrame.size.width, tempFrame.size.height)]; //This calculates the necessary size so that all the text fits in the necessary width.
//Add the height of the other UI elements inside your cell
return tvsize.height + staticElementHeights
}
這適用於iOS 7,但我認爲,如果你想支持iOS 6中,你需要實際添加的TextView作爲該子視圖的工作。只需設置temp.hidden = YES
文本顯示在一個UILabel的方式是從一個UITextView不同,所以對於一個UILabel,你應該使用這個答案 iOS auto adjust label height
最後一件事描述的方法,怎麼會我正確地去獲取標籤來顯示所有文本?我試圖將它設置爲0行,在我的故事板和我的自定義單元格中......並沒有任何內容 – ChuckKelly