Ios 如何更改UITableViewCell';使用自动布局动态调整高度?

Ios 如何更改UITableViewCell';使用自动布局动态调整高度?,ios,objective-c,uitableview,autolayout,Ios,Objective C,Uitableview,Autolayout,自调整大小的UITableViewCell:MyTableViewCell.m 此代码有效,MyTableViewCell的高度为20 但是,我想在运行时更改高度(将此单元格添加到UITableView之后),因此我向MyTableViewCell.m添加了一个新方法 我运行代码并调用updateHeight:10,得到日志警告: 2017-03-16 16:23:11.102858[14541:568021][布局约束]无法同时满足约束。 可能下面列表中至少有一个约束是您不想要的。 试试这个:

自调整大小的UITableViewCell:MyTableViewCell.m

此代码有效,
MyTableViewCell
的高度为20

但是,我想在运行时更改高度(将此单元格添加到UITableView之后),因此我向MyTableViewCell.m添加了一个新方法

我运行代码并调用
updateHeight:10
,得到日志警告:

2017-03-16 16:23:11.102858[14541:568021][布局约束]无法同时满足约束。 可能下面列表中至少有一个约束是您不想要的。 试试这个: (1) 看看每一个约束,试着找出你不期望的; (2) 找到添加了不需要的约束的代码,然后修复它。 ( "", "", "", "" ) 将尝试通过打破约束进行恢复

我个人的观点是,我在
viewDidLoad
中创建的约束会自动创建两个其他约束,如
contentView.height=20
,我对原始约束的更改与系统创建的约束冲突

我在
updateHeight:
中测试了更改示例视图的前导,而不是高度,结果成功了!因为前导的更改不会影响contentView自身的高度约束

我应该如何像这种情况下对自动布局进行动态更改


谢谢~~~

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

self.tableView.rowHeight = UITableViewAutomaticDimension;
  • 将顶部、底部、前导和尾随约束指定给所用的UILabel

  • 确保单元格中UILabel的numberOfLine设置为0

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


要获得动态单元格大小,您需要实现以下方法

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

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewAutomaticDimension;
}
-(CGFloat)tableView:(UITableView*)tableView估计的权重为rowatinexpath:(nsindepath*)indepath
{
返回;
}
-(CGFloat)tableView:(UITableView*)表视图行高度索引路径:(NSIndexPath*)索引路径
{
返回UITableViewAutomaticDimension;
}

我今天遇到了这个问题,通过重写UITableViewCell对象的drawRect方法解决了这个问题

- (void) drawRect:(CGRect)rect {
    [super drawRect:rect];

    [self adjustConstraint];
}

确保在单元格的
布局子视图之前执行
updateHeight:
方法。因为如果已加载单元格,则必须重新加载tableView以使新约束生效,这样您就可以在
tableView:cellForRowAtIndexPath:
方法中找出自动约束,或者您需要以下代码

[tableView beginUpdates];
// your code, alter your cell's constraints here
[tableView endUpdates];

请尝试
sample.translatesAutoResizengMaskintoConstraints=NO
。通常情况下,这解决了问题。你最终发现了吗?这里的所有答案都是为了初始化,而不是在你(和我)需要的时候进行更新。有什么发现吗?我已经做了一个自动调整大小的细胞。我的问题是在运行时更改高度,但无论如何还是要感谢~。我已经把它做成了一个自动调整大小的单元格。我的问题是在运行时更改高度,但是谢谢anyway@LuRui可以解释到底是什么问题吗?破坏的约束是你关心的吗?我已经把它做成了一个自动调整大小的单元。我的问题是在运行时更改高度,但是谢谢anyway@LuRui你到底想要什么?如果你想在运行时给单元格和self之后提供数据。tableView.reloadData()将自动管理所有高度。可能会有帮助吗
-(CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return <your estimated cell height>;
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewAutomaticDimension;
}
- (void) drawRect:(CGRect)rect {
    [super drawRect:rect];

    [self adjustConstraint];
}
[tableView beginUpdates];
// your code, alter your cell's constraints here
[tableView endUpdates];