如何根据文本动态定义uitableviewcell高度

时间:2013-07-28 06:28:19

标签: iphone objective-c uitableview

我正在使用分组的uitableview。我有很多部分。 在第一部分中只有一个UITableViewCell。在这个单元格中,我将显示一个文本。

问题是我不知道文本的字符数,我想更改单元格的高度以显示整个文本。

有人能帮帮我吗? 感谢

3 个答案:

答案 0 :(得分:0)

UItableViewDelegate方法中的

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath可以返回特定行的高度。为此,您必须知道要在该行中显示的字符串的长度。 请参阅此链接Get tableView:heightForRowAtIndexPath: to happen after tableView:cellForRowAtIndexPath:?

答案 1 :(得分:0)

您必须使用heightForRowAtIndexPath。在此范围内,您将必须执行您在单元格的layoutsubviewscellForRowAtIndexPath中执行的所有计算。为此,您必须弄清楚文本的长度。无论如何,您必须访问cellForRowAtIindexPath中的文本。那么为什么你不知道文本会有多长?

要确定实际文本的大小,您可以使用NSSTring的sizeWithFont:forWidth:lineBreakMode:

答案 2 :(得分:0)

我已经解决了应用以下代码并创建属性 numberOfTextRows 的问题。

(CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath

float height = 45.0f;

    if (indexPath.section == 0 && indexPath.row == 0) {
        CGSize theSize = [self.strResult sizeWithFont:[UIFont systemFontOfSize:12.0f] constrainedToSize:CGSizeMake(265.0f, 9999.0f) lineBreakMode:UILineBreakModeWordWrap];
        self.numberOfTextRows = round(theSize.height / 12);
        if ((indexPath.section == height) || (self.numberOfTextRows < 2)) {
            height = 45;
        } else {
            height = theSize.height + 16;
        }
    }

return height;

(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

  

cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;

     

cell.textLabel.numberOfLines = self.numberOfTextRows;