2013-02-13 50 views
0

我用下面的方法實現計算UITableViewCell這是一個包含多行文本的高度:heightForRowAtIndexPath爲分組UITableViewCell的

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.section == 1 && indexPath.row == 1) { 
    NSDictionary *fields = self.messageDetailsDictionary[@"fields"]; 
    NSString *cellText = fields[@"message_detail"]; 
    UIFont *cellFont = [UIFont systemFontOfSize:14.0]; 
    CGSize constraintSize = CGSizeMake(250.0f, MAXFLOAT); 
    CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping]; 

    return labelSize.height + 20; 

    } else { 

    return tableView.rowHeight; 

    } 

} 

爲了完整起見,下面是這個小區的cellForRowAtIndexPath項:

UITableViewCell *cell = [[UITableViewCell new] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"DetailCell"]; 
    if (cell == nil) { 
    cell = [[UITableViewCell new] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"DetailCell"]; 
    } 
    cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping; 
    cell.textLabel.font = [UIFont systemFontOfSize:14.0]; 
    NSDictionary *fields = self.messageDetailsDictionary[@"fields"]; 
    cell.textLabel.numberOfLines = 0; // This means multiline 
    cell.textLabel.text = fields[@"message_detail"]; 

    return cell; 

UITableViewCell在分組UITableView,這很重要,因爲它影響單元格的寬度。

這是工作的程度,它確實計算的單元格高度足以容納正在輸入的文本,但它似乎有點太大,因爲頂部和底部有太多空間的細胞。這取決於文本的數量,所以我不認爲它與return labelSize.height + 20;聲明有關。我懷疑這是低於我在CGSizeMake中使用的'250.0f'的值,但我不知道這裏應該有什麼正確的值。

最終我想要的是在任何內容大小的文本上下都有一致的填充。

任何人都可以幫忙嗎?

+0

該值應該是無論您的表視圖的寬度(減去一些填充可能)。大約320人的肖像iPhone,對吧? – rdelmar 2013-02-13 07:45:44

+0

只是補充說,它是一個分組tableview,所以寬度不是320我不認爲 – conorgriffin 2013-02-13 07:47:50

+0

是的,就像我說的,減去一點填充。當我測量一個時,對我來說看起來像300。 – rdelmar 2013-02-13 07:50:08

回答

0

通過一個消除過程,結果表明幻數是270.0f。 tableView框架的寬度可以從self.tableView.frame.size.width獲得。這是320.0f,從這個(等於270.0f)取50.0f似乎產生一致的結果。

所以方法應該如下:

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

    if (indexPath.section == 1 && indexPath.row == 1) { 

    NSDictionary *fields = self.messageDetailsDictionary[@"fields"]; 
    NSString *cellText = fields[@"message_detail"]; 
    UIFont *cellFont = [UIFont systemFontOfSize:14.0]; 
    CGSize constraintSize = CGSizeMake(self.tableView.frame.size.width - 50.0f, MAXFLOAT); 
    CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping]; 

    return labelSize.height + 20.0f; 

    } else { 

    return tableView.rowHeight; 

    } 

} 

我不知道是什麼原因50.0f是正確的值,因爲我不知道有多少是50.0f的距離的距離單元格邊框添加到tableView邊緣,單元格內部有多少內部填充,但除非您修改了這兩個值中的任何一個,否則它將起作用。

相關問題