1

我正在开发在 UILable 中显示用户评论的应用程序,并且 UILable 具有 sizetofit 属性。我想根据 UILable 高度更改单元格高度。

我的问题是我如何更改单元格高度,例如第一个单元格高度可能是 50,第二个单元格高度可能是 100,依此类推。

4

4 回答 4

3

对于 UITableViewCell 的动态高度,您必须执行以下操作

  • 满足 UITableViewCell 中的所有约束要求
  • 使用以下代码告诉您的 TableView 动态布局每个单元格的高度

    - (void)viewDidLoad {
         [super viewDidLoad];
    
         // two magic lines
         tableView.estimatedRowHeight = 89
         tableView.rowHeight = UITableView.automaticDimension
    }
    

只需两行代码,您就可以指示表格视图计算与内容匹配的单元格大小并动态呈现它。这种自我调整大小的单元格功能应该可以为您节省大量的代码和时间。你会喜欢的。

于 2015-07-07T05:53:17.793 回答
0

您可以使用此方法UITableViewCell动态增加高度(无自动布局)

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    NSMutableAttributedString *strName = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%@",strItemName]];

    [strName addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:16] range:NSMakeRange(0, strItemName.length)];
    CGSize sizeItemName = CGRectIntegral([strName boundingRectWithSize:CGSizeMake(130, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin context:nil]).size;
    int padding = 5;
    //your default cell height for ex 55 
    if (sizeItemName.height < 55)
    {
        sizeItemName.height = 55;
    }
    return sizeItemName.height + padding;
}
于 2015-07-07T06:05:14.103 回答
0

希望这可以通过 tableview 方法帮助您:

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 {
     return UITableViewAutomaticDimension;
 }
于 2015-07-07T06:07:08.473 回答
0

在您的 heightForRowAtIndexPath 中,根据相关单元格数据计算动态高度。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 { 
     NSDictionary *data = [self.dataSource objectAtIndex:indexPath.row];
     return [MyTableViewCell heightForData:data];
 }

然后在您的 MyTabLeViewCell 中,编写如下函数,假设数据具有“内容”,即动态高度的事实。你的 tableViewCell 用 CONTENT_LABEL_WIDTH 定义了一个名为 contentLabel 的 UILabel

+(CGFloat) heightForData : (NSDictionary *)data{

    self.contentLabel.text = [data objectForKey:@"content"];
    CGSize contentLabelSize = [self.contentLabel sizeThatFits:CGSizeMake(CONTENT_LABEL_WIDTH, CGFLOAT_MAX)];

    return contentLabelSize.height;

    //If you want to have a minimum cell height no matter how small your content is, you can use below fmaxf with a pre-defined CELL_MIN_HEIGHT value.
    // return fmaxf(CELL_MIN_HEIGHT, height);
}
于 2015-07-07T07:06:57.663 回答