我想为UITableViewCells使用自动布局,这些表格单元格具有动态高度(取决于文本长度)。
我正在使用[UIView -systemLayoutSizeFittingSize:]
计算适当的单元格高度(在[UITableView -heightForRowAtIndexPath:]
中返回),但我一直得到以下结果:
如果传递
UILayoutFittingCompressedSize
,我会收到大小为(0,0)的CGSize。如果传递
UILayoutFittingExpandedSize
,我的应用程序会崩溃,并出现以下错误:*** Assertion failure in -[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
设置为一个较大的值,所有单元格看起来都很好,只是高度不对。 - Interface Builder没有警告关于模糊的约束。
[cell hasAmbiguousLayout]
返回NO
。- 我的单元格除了其他内容外,还有一张48x48像素的图片,所以大小为(0,0)不应该满足所有的约束条件。
有任何想法吗?