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

标签 ios cocoa-touch uitableview interface-builder autolayout

我想为 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) 的大小不应满足所有限制条件。

有什么想法吗?

最佳答案

这对我有用(注意“contentView”)

CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];

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

How to resize superview to fit all subviews with autolayout?

关于ios - 在 UITableViewCell 上调用 `[UIView -systemLayoutSizeFittingSize:]` 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17576005/

相关文章:

objective-c - 在没有新初始化的情况下使用类中的数据

ios - Xcode 7 beta 5 中 iOS 9.0 之前的 UIStackView

iphone - 即使我设置了内容大小,UIScrollView 也不会滚动

objective-c - UIImagePickerController 叠加自动旋转

ios - 保存选定 TableView 行的用户名

ios - 重新加载除一个单元格之外的表格 View

uitableview - 如何使用多级可扩展可折叠行创建 UITableView?

ios - UICollectionView 中仅某些单元格之间的自定义间距

ios - 尝试使用用户默认值保存时出错

ios - 在更改 View (Segue) 时显示事件指示器并为下一个 View (API) 加载数据