如何使用自动布局动态更改UITableViewCell的高度?
自上浆的UITableViewCell:MyTableViewCell.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自身的身高限制吗?
我该如何动态改变自动布局,像这种情况?
谢谢~~~
在您的视图控制器中设置tableview行高度。请参阅下面的代码行:
self.tableView.rowHeight = UITableViewAutomaticDimension;
我已经使这个自我大小的单元格。我的问题是在运行时改变高度,但无论如何感谢〜。 – LuRui
tableView.estimatedRowHeight = 44.0 //put as per your cell row height
tableView.rowHeight = UITableViewAutomaticDimension
给顶,底,前置,后置约束上,以的UILabel使用。
确保numberOfLine您的UILabel在单元格设置为0。
预计行高度需要提供。(提供任何适当的值)
我已经使这个自我大小的单元格。我的问题是在运行时更改高度,但无论如何感谢 – LuRui
@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;
}
尝试'sample.translatesAutoresizingMaskIntoConstraints = NO'。通常情况下,这解决了这个问题。 – Rikh
你最终发现了吗?这里的所有答案都是初始化,而不是随时更新,这是你(和我)需要的。任何发现? – Lapidus