2015-07-10 96 views
3

我在大型項目中使用Autolayout來創建新的UITableViewCells。UITableViewCell和heightForRowAtIndexPath的iOS動態高度

我有一個TableView,其中每行的高度自動計算,我不使用委託功能heightForRowAtIndexPath

我聲明瞭一個估計行高度:

tableView.estimatedRowHeight = 44.0 
tableView.rowHeight = UITableViewAutomaticDimension 

我的問題是:在另一個TableViewController有很多UITableViewCells,在那裏我編程需要聲明細胞的高度heightForRowAtIndexPath的。我知道將所有單元格轉換爲獨特的解決方案會更好,但在此項目中有很多不同的單元格,所以我想使用一種解決方法並將動態計算的高度與自動佈局以及編程計算的行高度。

這可能嗎?

回答

14

如果您使用的是iOS 8或更高版本,則無需動態計算高度。自動佈局將爲您做所有事情。但是如果你使用的是低於IOS 8,你需要計算細胞高度。

對於IOS 8:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return UITableViewAutomaticDimension; 
} 

並添加下面的代碼在你的控制器:

tableView.estimatedRowHeight = 400.0 
tableView.rowHeight = UITableViewAutomaticDimension 

estimatedRowHeight應該是最大高度可以爲您的細胞。

謝謝

+0

真棒謝謝。 –

1

使用boundingRectWithSize動態計算內容的高度。 如果你有一個UILabel這是動態的,你可以使用以下命令:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    /* Check Content Size and Set Height */ 
    CGRect answerFrame = [YOUR_LABEL.text boundingRectWithSize:CGSizeMake(240.f, CGFLOAT_MAX) options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName:[UIFont fontWithName:@"" size:14.0f]} context:nil]; 

    CGSize requiredSize = answerFrame.size; 

    return requiredSize.height; 
} 
0

你可以試試這個。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    { 
    int topPadding = cell.yourLabel.frame.origin.x; 
    int bottomPadding = cell.frame.size.heigth-(topPadding+cell.yourLabel.frame.size.height); 
    NSString *text = [DescArr objectAtIndex:[indexPath row]]; 
    CGSize maximumSize = CGSizeMake(cell.yourLabel.frame.size.width, 9999); 
    CGSize expectedSize = [text sizeWithFont:yourCell.yourLabel.font constrainedToSize:maximumSize lineBreakMode:yourCell.yourLabel.lineBreakMode]; 

    return topPadding+expectedSize.height+bottomPadding; 
} 
+0

問題是,我沒有隻有一個UILabel。但是,當我看到動態高度僅適用於iOS8及更高版本 - 所以當我想要支持iOS 8時,我必須以編程方式計算高度,對嗎? – brokedid

+0

@brokedid是的,你總是必須以編程方式計算高度 – Developer

+0

你好。如果我的屏幕高度是〜700,但從標籤計算的高度爲1000,這樣我的標籤就可以顯示所有文本,因爲退回高度1000不會工作 – kemdo

相關問題