以编程方式向UITableCellView添加约束

时间:2017-01-18 12:55:23

标签: ios swift uitableview nslayoutconstraint uitableviewautomaticdimension

在我的iOS 8项目中,我有一个UITableView自动变量行高。在故事板中,我定义了一个原型UITableViewCell,其中设置了大多数约束。由于单元格内容可能会根据它要显示的对象略有不同,因此我决定不在故事板中创建多个原型,而是以编程方式进行必要的更改。我在tableView(_:cellForRowAtIndexPath)内添加了任何缺少的单元格子视图。

造成我问题的原因是创建了缺失的约束。这在tableView(_:cellForRowAtIndexPath)中是不可能的,因为单元子视图尚未设置(即它们还没有超级视图),所以我调用cell.setNeedsUpdateConstraints()并在{{1}内设置它们覆盖。除以下情况外,这种方法大多有效。表视图有一个选择segue将视图控制器推到导航堆栈上;然后在由unwind segue触发的action方法中,我想重新加载触发选择segue的行的单元格,但调用cell.updateConstraints()会在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.

有效地导致一些单元格具有估计的行高度,并且它们的子视图都搞砸了。

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

0 个答案:

没有答案