Я задавал этот вопрос много раз, но поразительно, я не видел последовательного ответа, поэтому сам попробую:
Если у вас есть табличное представление, содержащее ваш собственный UITableViewCells, содержащий UITextViews и UILabels, высота которых должна определяться во время выполнения, как вы должны определять высоту для каждой строки в heightForRowAtIndexPath?
Наиболее очевидной первой идеей является вычисление высоты для каждой ячейки путем вычисления, а затем суммирования высот каждого представления внутри ячейки внутри cellForRowAtIndexPath и сохранения этой конечной общей высоты для последующего извлечения.
Это не будет работать, потому что cellForRowAtIndexPath вызывается ПОСЛЕ heightForRowAtIndexPath.
Единственное, о чем я могу думать, это сделать все вычисления внутри viewDidLoad, затем создать все UITableViewCells, вычислить высоту ячеек и сохранить это в пользовательском поле внутри вашего подкласса UITableViewCell и поместить каждую ячейку в NSMutableDictionary с помощью indexPath как ключ, а затем просто извлекать ячейку из словаря, используя indexPath внутри cellForRowAtIndexPath и heightForRowAtIndexPath, возвращая либо пользовательское значение высоты, либо сам объект ячейки.
Этот подход кажется неправильным, хотя из-за того, что он не использует dequeueReusableCellWithIdentifier, вместо этого я бы сразу загрузил все ячейки в словарь в моем контроллере, и методы делегата будут делать не что иное, как получение правильной ячейки из словарь.
Я не вижу другого способа сделать это, хотя. Это плохая идея - если да, то каков правильный способ сделать это?