Я хочу использовать авто-макет для UITableViewCells. Эти ячейки таблицы имеют динамическую высоту (в зависимости от длины текста).
Я использую [UIView -systemLayoutSizeFittingSize:]
для вычисления соответствующей высоты ячейки (для возврата в [UITableView -heightForRowAtIndexPath:]
), но я продолжаю получать следующие результаты
-
Если я передаю
UILayoutFittingCompressedSize
, я возвращаю CGSize (0,0). -
Если я прохожу
UILayoutFittingExpandedSize
, мое приложение вылетает с этой ошибкой:*** Ошибка утверждения в - [NSISLinearExpression incrementConstant:],/SourceCache/Foundation_Sim/Foundation.1043.1/Layout.subproj/IncrementalSimplex/NSISLinearExpression.m:620
(Я предполагаю, что это означает, что некоторое число бесконечно.)
Моя реализация проста. Я вычисляю высоту для каждого объекта, а затем кешу:
MessageCell *cell = // allocate a new cell...
// set up the cell (assign text, images, etc)
CGSize size = [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
self.cellHeight = size.height; // size always equals (0, 0)
Я предполагаю, что это проблема с установленными ограничениями, но:
- Если я вручную установил
cellHeight
в большое значение, все ячейки выглядят отлично, за исключением того, что высота неправильная. - Интерфейс Builder не дает мне никаких предупреждений о неоднозначных ограничениях
-
[cell hasAmbiguousLayout]
возвращаетNO
. - У моей ячейки есть, среди прочего, изображение, установленное на 48x48, поэтому размер (0, 0) не должен удовлетворять всем ограничениям.
Любые идеи?