繁体   English   中英

将Dynamic Cell的表视图内容高度设置为表视图高度约束ios

[英]Set Dynamic Cell's Table View Content height to table view height constraints ios

我有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)的自定义单元重载表视图(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)的单元格子表中表视图(B)的高度约束。 tableBHeightConstraints.constant没有获得所有计算约束的正确值。

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

这是tableview(A)的Cell 在此输入图像描述

在此输入图像描述

这是tableview(B)的Cell

请帮帮我们

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

注意

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

试试这个 :

采用UItableView的高度约束

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

在tableview中的节数方法。

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

如果使用分组样式,则实际上每个组都是具有页眉和页脚的单个tableView。

最好将约束设置为相等的高度:

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上自动更新它的单元格的高度

尝试将您的更改从-(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;
});

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM