如何使用自动布局动态更改UITableViewCell的高度?

问题描述:

自上浆的UITableViewCellMyTableViewCell.m如何使用自动布局动态更改UITableViewCell的高度?

-(void) viewDidLoad{ 
     UIView *sample = [[UIView alloc] init]; 
     [self.contentView addSubview: sample]; 

     //Fake code here. Let sample view fill the whole contentView: 
     Constraint1: sample.leading = contentView.leading; 
     Constraint2: sample.trailing = contentView.trailing; 
     Constraint3: sample.top = contentView.top; 
     Constraint4: sample.bottom = contentView.bottom; 
     Constraint5: sample.height = 20; 
     NSLayoutConstraint:activateConstriant(constraints 1-5); 
} 

此代码工作和MyTableViewCell有20

的高度。然而,我想改变在运行时的高度(在这个单元格添加到UITableView之后),所以我添加了一个新方法MyTableViewCell.m

-(void) updateHeight:(CGFloat)newHeight{ 
     //Fake code here. change the constant of constraint1 
     Constraint1 = get reference of Constraint1 in viewDidLoad(); 
     Constraint1.constant = newHeight 
} 

我运行代码和呼叫updateHeight:10并得到了日志警告:

2017年3月16日16:23:11.102858 [14541:568021] [LayoutConstraints]无法同时满足约束。 以下列表中的至少一个约束可能是您不想要的。 试试这个: (1)看看每个约束,并试图找出你不期望的; (2)找到添加不需要的约束或约束并修复它的代码。 ( “”, “”, “”, “” ) 将尝试打破约束,以恢复

我自己的看法是,我限制在viewDidLoad创建自动创建几个其他的限制像contentView.height=20和我对原始约束的更改与系统创建的约束冲突。

我测试过更改样本视图的领导而不是updateHeight:的高度,它的工作原理!因为领先的变化不会影响contentView自身的身高限制吗?

我该如何动态改变自动布局,像这种情况?

谢谢~~~

+0

尝试'sample.translatesAutoresizingMaskIntoConstraints = NO'。通常情况下,这解决了这个问题。 – Rikh

+1

你最终发现了吗?这里的所有答案都是初始化,而不是随时更新,这是你(和我)需要的。任何发现? – Lapidus

在您的视图控制器中设置tableview行高度。请参阅下面的代码行:

self.tableView.rowHeight = UITableViewAutomaticDimension; 
+0

我已经使这个自我大小的单元格。我的问题是在运行时改变高度,但无论如何感谢〜。 – LuRui

tableView.estimatedRowHeight = 44.0 //put as per your cell row height 
    tableView.rowHeight = UITableViewAutomaticDimension 
  • 给顶,底,前置,后置约束上,以的UILabel使用。

  • 确保numberOfLine您的UILabel在单元格设置为0。

  • 预计行高度需要提供。(提供任何适当的值)

+0

我已经使这个自我大小的单元格。我的问题是在运行时更改高度,但无论如何感谢 – LuRui

+0

@LuRui你想要什么?如果你想运行时间给数据到单元格和后self.tableView.reloadData()将自动管理所有高度.may它将帮助 –

要具有动态小区大小,你需要实现以下方法

-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return <your estimated cell height>; 
} 

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

我已经使这个自我大小的单元格。我的问题是在运行时改变高度,但无论如何谢谢 – LuRui

+0

@LuRui可以解释究竟是什么问题?破碎的限制是你关心的吗? – Priyal