в ячейке сделать публичный метод типа calculateSize, и, в методе делегата таблицы спрашивать у каждой ячейки, какой ей нужен размер. Для этого обычно делают прототип ячейки, которая “висит в воздухе”, на нее накидывается view state и на основании конкретных данных определяется высота