将动态单元格的表视图内容高度设置为表视图高度约束 ios

Posted

技术标签:

【中文标题】将动态单元格的表视图内容高度设置为表视图高度约束 ios【英文标题】:Set Dynamic Cell's Table View Content height to table view height constraints ios 【发布时间】:2016-10-20 02:06:03 【问题描述】:

我有 tableview(A) 的每个自定义单元格都有 tableview(B) 和动态表格视图单元格。

在 tableview(A) cellForRowAtIndex。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

     MainMessageTVCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MsgMainCell"];

        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        NSInteger index = indexPath.row;

        MessageMain *result = tableData[index];

        cell.dateLabelTC.text = [NSString stringWithFormat:@"Date : %@",result.createdTime];
        cell.subjectLabelTC.text = [NSString stringWithFormat:@"Subject : %@",result.subject];

        NSArray *arrList = result.messageList;
        [cell setupTableData:(NSMutableArray *)arrList];

        [cell setNeedsUpdateConstraints];

在 tableview(A) 的自定义单元格处重新加载 tableview(B)。

-(void)setupTableData:(NSMutableArray *)tableData

    _tableData = tableData;

    [self.tableView reloadData];

-(void)updateConstraints
    [super updateConstraints];

    dispatch_async(dispatch_get_main_queue(), ^
        [self.tableView layoutIfNeeded];
        CGFloat height = self.tableView.contentSize.height;//+1000;
        tableBHeightConstraints.constant  = height;
    );

tableBHeightConstraints 是 tableview(A) 的子单元格中 table view(B) 的高度约束。 tableBHeightConstraints.constant 没有得到所有计算约束的正确值。

在动态表格单元格的高度设置之后准确获取 tableView.contentSize.height 的最佳位置或方法是什么。

这是 tableview(A) 的 Cell

这是tableview(B)的单元格

请帮助大家。

【问题讨论】:

【参考方案1】:

如果你不能让它工作,那么为什么不尝试一些不同的东西。与其尝试将 tableView 粘贴在 tableCell 中,不如直接修改您的数据源以将两个表作为一个表来管理。这可能是一个更好的解决方案,因为它应该更高效并且作为单个表更好地工作。

如果您使用分组样式,那么实际上每个组都是一个带有页眉和页脚的单独 tableView。

【讨论】:

是的,我别无选择。我必须照你说的去做,谢谢。组样式问题我无法在每个组中设置背景图像。我必须在每个页眉、单元格和页脚中设置图像。【参考方案2】:

尝试将您的更改从 -(void) updateConstraints 移动到 -(void) viewDidLayoutSubviews

-(void)viewDidLayoutSubviews
[super viewDidLayoutSubviews];

dispatch_async(dispatch_get_main_queue(), ^
    [self.tableView layoutIfNeeded];
    CGFloat height = self.tableView.contentSize.height;//+1000;
    tableBHeightConstraints.constant  = height;
);

【讨论】:

【参考方案3】:

在 viewDidLoad 方法中添加以下代码。

   self.tableView.rowHeight = UITableViewAutomaticDimension;
    [self.tableView setEstimatedRowHeight:85.0];

还包括estimatedHeightForRowAtIndexPath方法,并返回一个估计的行高,如下所示,

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath

    return 100;

为 heightForRowAtIndexPath 分配一个自动尺寸。该方法要求委托提供用于指定位置的行的高度。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    return UITableViewAutomaticDimension;

注意

要使表格行具有动态高度,必须将内容视图中的标签固定在顶部和底部,以便它们可以根据内容缩小或增长。如果您遇到任何困难,请及时更新我。

【讨论】:

我已经在我的 table viewA 和 tableviewB 的代码中做了这个。由于数据馈送,tableviewB 的高度显示随着其单元格高度的增加而增加,并且 tableviewA 的单元格高度也增加了。 你能解释一下吗 如果tableviewB的单元格高度由于文本设置为标签而增加(您可以看到最后一个附加图像)。那么tableviewB的高度应该增加。那是在 tableviewA 的单元格内,所以 tableviewA 的单元格也应该增加。它是另一个表视图单元格中的嵌套表视图。【参考方案4】:

最好简单地将约束设置为等高:

tableA_cell.contentView height = TableB height

如果有视觉限制,它会是这样的:

NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(tableB);
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V|[tableB|" options:0 metrics:0 views:viewsDictionary];

那么魔法应该会自己发生。

如果您对 tableB 进行任何更改,只需调用

[self.tableView beginUpdates]
[self.tableView endUpdates]

在表 A 上自动更新其单元格的高度

【讨论】:

最好将约束简单地设置为相等高度: tableA_cell.contentView height = TableB height 这是一个好主意,但如何做到这一点。你能给我一个想法吗,我正在使用约束。以及设置tableviewB高度的最佳位置是什么 查看我的更新答案。您的问题中没有足够的代码来回答这个问题。没有代码显示您在哪里创建 tableB 或设置它的约束。 对不起,我不能帮你。我用代码做约束。我不了解所见即所得的工具。也许您需要使用代码添加一些约束,就像我上面建议的那样。您可以做的另一件事是实现 - tableView:heightForRowAtIndexPath: 在 tableA 的 UITableViewDelegate 中返回实际计算的高度而不是自动尺寸。 我只是使用自动布局实现嵌套表格视图。另一个视图单元格中的动态表格视图。请确实尝试了很多方法,但没有得到解决方案。请帮帮我。【参考方案5】:

试试这个:

取UItableView的高度约束

_tableViewHieghtConstraint.constant = 行高 * 数组计数。

在tableview中的section方法号。

【讨论】:

如何获得完整的表格内容高度,因为我有动态单元格,也有页眉和页脚。

以上是关于将动态单元格的表视图内容高度设置为表视图高度约束 ios的主要内容,如果未能解决你的问题,请参考以下文章

动态更改表格视图单元格的高度

设置表格视图单元格的动态高度

我可以设置我的自动布局约束,以便将图像视图设置为图像的高度

动态表视图高度

自动调整大小(动态高度)表格视图单元格的问题

使用自动布局自定义集合视图单元格的动态高度