如何动态更改每个UITableViewCell高度?

时间:2015-07-07 05:42:10

标签: ios uitableview sizetofit

我在应用程序上工作,我在UILable和UILable中显示用户评论有sizetofit属性。我想根据UILable高度改变细胞高度。

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

4 个答案:

答案 0 :(得分:3)

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

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

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

只需两行代码,您可以指示表视图计算与其内容匹配的单元格大小并动态呈现它。这种自定义单元格功能可以节省大量的代码和时间。你会爱上它。

答案 1 :(得分:0)

您可以使用此方法动态增加UITableViewCell高度(No AutoLayout)

- (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;
}

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

然后在MyTabLeViewCell中编写如下函数,让我们说数据有&#34;内容&#34;这是动态高度的事实。你的tableViewCell定义了一个名为contentLabel的UILabel,内容为CONTENT_LABEL_WIDTH

+(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);
}
相关问题