Установите для высоты содержимого табличного представления динамической ячейки ограничения высоты представления таблицы ios
У меня есть tableview (A) каждая пользовательская ячейка, имеющая tableview (B) с ячейкой динамического представления таблицы.
В табличном представлении (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];
}
В табличном представлении (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 - это ограничения высоты представления таблицы (B) в дочернем элементе tableview (A). tableBHeightConstraints.constant не получает правильное значение со всеми расчетными ограничениями.
Каково лучшее место или метод, чтобы получить точное значение tableView.contentSize.height после установки высоты ячейки динамической таблицы.
Это ячейка tableview (B)
Пожалуйста, помогите, ребята.
5 ответов
Добавьте следующий код в ваш метод viewDidLoad.
self.tableView.rowHeight = UITableViewAutomaticDimension;
[self.tableView setEstimatedRowHeight:85.0];
Также включите метод metHeightForRowAtIndexPath и верните предполагаемую высоту строки следующим образом:
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 100;
}
Назначьте автоматическое измерение для heightForRowAtIndexPath. Метод запрашивает у делегата высоту, которую следует использовать для строки в указанном месте.
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewAutomaticDimension;
}
НОТА
Чтобы строка таблицы имела динамическую высоту, метки в представлении содержимого должны быть закреплены сверху и снизу, чтобы они могли уменьшаться или увеличиваться в соответствии с содержимым. Обновите меня на случай, если у вас возникнут какие-либо трудности.
Если вы не можете заставить это работать, то почему бы не попробовать что-то другое. Вместо того, чтобы пытаться вставить tableView в tableCell, почему бы просто не изменить ваш источник данных, чтобы управлять двумя таблицами как одной. Вероятно, это лучшее решение, так как оно должно быть более эффективным и работать лучше, как одна таблица.
Если вы используете групповой стиль, то фактически каждая группа представляет собой отдельный табличный вид с верхним и нижним колонтитулом.
Попробуй это:
принять ограничение по высоте UItableView
_tableViewHieghtConstraint.constant = высота строки * количество массивов.
в табличном представлении номер раздела метода.
Попробуйте перенести изменения из -(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;
});
}
Лучше просто установить ограничение равной высоте:
tableA_cell.contentView height = TableB height
С визуальными ограничениями это будет примерно так:
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(tableB);
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V|[tableB|" options:0 metrics:0 views:viewsDictionary];
Тогда волшебство должно произойти само собой.
Если вы вносите какие-либо изменения в таблицу B, просто позвоните
[self.tableView beginUpdates]
[self.tableView endUpdates]
в таблице A для автоматического обновления высоты его ячеек