Динамическая высота ячейки TableView
У меня есть UITableView(Таблица 1). Внутри ячейки UITableView у меня есть другой UITableView(таблица 2).
В Table 2
высота строк UITableViewAutomaticDimension
,
Мое требование - я хочу это Table 2
не должно быть прокрутки и занимает полную высоту в соответствии с количеством строк внутри него. Так, согласно этому Table 2
высота мне нужно установить Table 1
высота строки.
Я использую таблицу 2 contentSize.height, но она не работает. Я много искал, но ничего не нашел.
Код:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
let cell = tableView_First.dequeueReusableCell(withIdentifier: "SecondTableViewCell") as! SecondTableViewCell
return cell.second_TableView.contentSize.height
}
Обновить:
Я отладил код и обнаружил, что расчетная высота ячейки таблицы 2 влияет на высоту ячейки таблицы 1. т.е., если предполагаемая высота ячейки таблицы 2 равна 100, а это 5 ячеек. Тогда это cell.second_TableView.contentSize.height
дает мне 500. Что не так. Потому что ячейка имеет разную высоту 10, 20, 30, 40, 10.
Любые предложения будут оценены.
Спасибо!
2 ответа
Можете ли вы получить неправильный результат по двум причинам
Когда вы получаете
cell.second_TableView.contentSize.height
на этот раз вашcell.second_TableView
может быть не загружен полностью, поэтому вы получаете неправильную высоту.Вы удаляете новую ячейку из очереди, а не получаете уже загруженную ячейку.
Пожалуйста, попробуйте ниже код:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
//Get existing cell rather deque new one
let cell = tableView_First.cellForRowAtIndexPath(indexPath) as! SecondTableViewCell
//This will force table view to load completely
cell.second_TableView.layoutIfNeeded()
return cell.second_TableView.contentSize.height
}
Надеюсь, что это решит вашу проблему.
Напишите эти две строки в viewDidLoad,
tableView.estimatedRowHeight = 241
tableView.rowHeight = UITableViewAutomaticDimension
func tableView (_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {return UITableViewAutomaticDimension}