在UITableViewCell上调用`[UIView -systemLayoutSizeFittingSize:]`总是失败

Aar*_*ger 20 cocoa-touch interface-builder uitableview ios autolayout

我想为UITableViewCells使用自动布局.这些表格单元格具有动态高度(取决于文本长度).

我正在使用[UIView -systemLayoutSizeFittingSize:]计算适当的单元格高度(返回[UITableView -heightForRowAtIndexPath:]),但我一直得到以下结果:

  • 如果我通过UILayoutFittingCompressedSize,我会收到(0,0)的CGSize.

  • 如果我通过UILayoutFittingExpandedSize,我的应用程序崩溃与此错误:

    ***断言失败 - [NSISLinearExpression incrementConstant:],/ SourceCache /Foundation_Sim/Foundation1043.1/Lightsout.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)
Run Code Online (Sandbox Code Playgroud)

我假设这是我设置的约束的问题,但是:

  • 如果我手动设置cellHeight为较大的值,除了高度错误外,单元格看起来都很好.
  • Interface Builder没有给出关于模糊限制的警告
  • [cell hasAmbiguousLayout]回报NO.
  • 我的单元格中有一个设置为48x48的图像,因此(0,0)的大小不应满足所有约束.

有任何想法吗?

Tom*_*ift 38

这对我有用(注意'contentView')

CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
Run Code Online (Sandbox Code Playgroud)

编辑:我回答了类似的问题并提供了一个完整的例子,这里:

如何调整superview的大小以适应autolayout的所有子视图?