我有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)的单元格子表中表视图(B)的高度约束。 tableBHeightConstraints.constant没有获得所有计算约束的正确值。
在动态表格单元格的高度设置之后,获取tableView.contentSize.height的最佳位置或方法是什么。
这是tableview(B)的Cell
请帮帮我们。
答案 0 :(得分:5)
在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;
}
注意强>
要使您的表格行具有动态高度,必须将内容视图中的标签固定到顶部和底部,以便它们可以根据内容缩小或增大。如果您遇到任何困难,请更新我。
答案 1 :(得分:1)
试试这个:
采用UItableView的高度约束
_tableViewHieghtConstraint.constant =行的高度*数组的数量。
在tableview中的节数方法。
答案 2 :(得分:1)
如果你不能让它发挥作用,那么为什么不尝试不同的东西。为什么不修改数据源来管理两个表,而不是试图将tableView固定在tableCell中。这可能是一个更好的解决方案,因为它应该更有效,并且作为单个表更好地工作。
如果使用分组样式,那么实际上每个组都是具有页眉和页脚的单个tableView。
答案 3 :(得分:0)
最好将约束设置为相等的高度:
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上自动更新其单元格的高度
答案 4 :(得分:0)
尝试将更改从-(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;
});
}