2

我有一个具有正确详细单元格布局的分组表视图。现在我从我的服务器取回了我的数据。有时我会收到一个非常大的文本。所以 tableviewCell 应该高于其他的。你可以在这里看到我的问题的截图。

在此处输入图像描述

就像您在我的第一个单元格中看到的那样,我有一个非常大的文本。现在我希望单元格的高度随着文本的长度而增长,所以我总是可以看到整个文本而不是'...'这就是我现在在代码中所拥有的。

#define PADDING 10.0f
- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    Subscription *sub = [_dictTask valueForKeyPath:@"subscription"];

    NSArray *meta = sub.meta.allObjects;

    NSString *text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];
    CGSize textSize = [text sizeWithFont:[UIFont systemFontOfSize:14.0f] constrainedToSize:CGSizeMake(self.tableView.frame.size.width - PADDING * 3, 1000.0f)];

    return textSize.height + PADDING * 3;
}

编辑 我目前拥有的代码。

- (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    Subscription *sub = [_dictTask valueForKeyPath:@"subscription"];

    NSArray *meta = sub.meta.allObjects;

    NSString *text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];
    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:14.0];
    CGSize constraintSize = CGSizeMake(330.0f, 400);  // Make changes in width as per your label requirement.

    CGSize textSize = [text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    return  textSize.height;
}

这就是结果。

在此处输入图像描述

编辑 CellForRowAtIndexPath

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    Subscription *sub = [_dictTask valueForKeyPath:@"subscription"];
    NSArray *meta = sub.meta.allObjects;
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];


        cell.textLabel.text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_label"];
        cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.detailTextLabel.numberOfLines = 0;
        cell.detailTextLabel.text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];

        cell.textLabel.textColor = [UIColor colorWithRed:102/255.0
                                               green:102/255.0
                                                blue:102/255.0
                                               alpha:1.0];
        cell.textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:18];
        return cell;



}
4

2 回答 2

1

您需要lineBreakMode:UILineBreakModeWordWrap在代码中使用。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];
    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:14.0];
    CGSize constraintSize = CGSizeMake(330.0f, MAXFLOAT);  // Make changes in width as per your label requirement. 

    CGSize textSize = [text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    return  textSize.height;
}

此外,您需要also in datasource method像这样设置 detailTextLabel cellForRowAtIndexPath` 的两个属性:

- (UITableViewCell *)tableView:(UITableView *)table cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
   cell.detailTextLabel.numberOfLines = 0;
 }
  • numberofLines 属性描述:

    此属性控制要使用的最大行数,以使标签的文本适合其边界矩形。此属性的默认值为 1。要删除任何最大限​​制并根据需要使用尽可能多的行,请将此属性的值设置为 0。

于 2013-01-21T15:44:09.563 回答
0

尝试这个:

 - (CGFloat)tableView:(UITableView *)t heightForRowAtIndexPath:(NSIndexPath *)indexPath {
            Subscription *sub = [_dictTask valueForKeyPath:@"subscription"];

            NSArray *meta = sub.meta.allObjects;

            NSString *text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];
            UIFont *cellFont = [UIFont fontWithName:@"Helvetica-Bold" size:18.0];
            CGSize constraintSize = CGSizeMake(330.0f, MAXFLOAT);  // Make changes in width as per your label requirement.

            CGSize textSize = [text sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    return  textSize.height + 20; }

然后,考虑使用唯一的小区标识符。这里的想法是重用单元格将导致内容的高度不匹配。(有些人不喜欢唯一标识符的想法,但它们可以工作,除非你的表很大,否则它们不会有问题。)因此,试试这个:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    Subscription *sub = [_dictTask valueForKeyPath:@"subscription"];
    NSArray *meta = sub.meta.allObjects;

        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"%i", indexPath.row]];

    if (cell == nil){
        cell.textLabel.text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_label"];
        cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.detailTextLabel.numberOfLines = 0;
        cell.detailTextLabel.text = [[meta objectAtIndex:indexPath.row]valueForKey:@"sum_value"];

        cell.textLabel.textColor = [UIColor colorWithRed:102/255.0
                                               green:102/255.0
                                                blue:102/255.0
                                               alpha:1.0];
        cell.textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:18];
}
        return cell;
}
于 2013-01-21T22:50:01.950 回答