1

在我针对 iOS 8 的项目中UITableView,我有一个自动可变行高。在情节提要中,我定义了一个UITableViewCell设置了大多数约束的原型。由于单元格内容会根据要显示的对象而略有不同,因此我决定不在情节提要中创建多个原型,而是以编程方式进行必要的更改。我在tableView(_:cellForRowAtIndexPath).

导致我出现问题的原因是创建缺少的约束。这是不可能的,tableView(_:cellForRowAtIndexPath)因为尚未设置单元格子视图(即它们还没有超级视图),因此我调用cell.setNeedsUpdateConstraints()并在覆盖内设置它们cell.updateConstraints()。这种方法大多有效,但以下情况除外。表格视图有一个选择 segue 将视图控制器推送到导航堆栈上;然后在由 unwind segue 触发的操作方法中,我想为触发选择 segue 的行重新加载单元格,但是调用tableView.cellForRowAtIndexPath(_)其中一个会在内部引发此异常cell.updateConstraints()

The view hierarchy is not prepared for the constraint: <NSLayoutConstraint:0x7aa950b0 V:[UITextView:0x7b3d2e00'Fasd']-(8)-[UIButton:0x7aa860c0'0 comments']>
When added to a view, the constraint's items must be descendants of that view (or the view itself). This will crash if the constraint needs to be resolved before the view hierarchy is assembled. Break on -[UIView(UIConstraintBasedLayout) _viewHierarchyUnpreparedForConstraint:] to debug.

或此警告:

Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.

这有效地导致一些单元格的估计行高和它们的子视图都搞砸了。

在这种特殊情况下,似乎尚未设置单元格子视图。有人知道这个问题的解决方案吗?

4

0 回答 0