Динамическая высота ячейки 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 ответа

Можете ли вы получить неправильный результат по двум причинам

  1. Когда вы получаете cell.second_TableView.contentSize.height на этот раз ваш cell.second_TableView может быть не загружен полностью, поэтому вы получаете неправильную высоту.

  2. Вы удаляете новую ячейку из очереди, а не получаете уже загруженную ячейку.

Пожалуйста, попробуйте ниже код:

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}

Другие вопросы по тегам