我正在实现一个自定义UITableView,它将垂直展开单个单元格以在用户点击单元格时显示详细信息。
我在didSelectRowAtIndexPath处理程序中将addConstraint调用到UITableViewCell时遇到问题:
Unable to simultaneously satisfy constraints.
...
If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0xa0c9cc0 V:[UITableView:0xc339c00]-(0)-| (Names: '|':UITableViewCellContentView:0xa0c8910 )>",
"<NSAutoresizingMaskLayoutConstraint:0xa0b8600 h=--& v=--& V:[UITableViewCellContentView:0xa0c8910(25)]>",
"<NSLayoutConstraint:0xa0caad0 V:|-(42)-[UITableView:0xc339c00] (Names: '|':UITableViewCellContentView:0xa0c8910 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0xa0c9cc0 V:[UITableView:0xc339c00]-(0)-| (Names: '|':UITableViewCellContentView:0xa0c8910 )>
以下是我实施的更多细节:
在步骤2,以上&#34;无法同时满足约束&#34;发生错误。我相信这是因为didSelectRowAtIndexPath在heightForRowAtIndex之前被调用。我的预感是translatesAutoresizingMaskIntoConstraints设置(在我的实现中是YES)是基于单元格高度的运行时值创建新约束,该值在运行didSelectRowAtIndexPath代码后更新。
是否有推荐的方法来解决此问题?或者是否有另一种方法来执行细胞扩增,这仍然允许我为细胞的内容设置必要的细胞限制?
答案 0 :(得分:6)
想出来。我的部分问题与此处的解决方案有关:How is it possible that UITableViewCellContentView height is different from heightForRowAtIndexPath:
我发现我需要在单元格的[self.contentView setAutoresizingMask:UIViewAutoresizingFlexibleHeight]
中添加awakeFromNib
,以便调整单元格的高度。
addConstraint
之前调用heightForRowAtIndex
相关的其他问题的答案。我怀疑在addConstraint
中拨打didSelectRowAtIndexPath
是有问题的。
根据UIView Class Reference,添加约束的正确方法是让我在- (void)setNeedsUpdateConstraints
中调用didSelectRowAtIndexPath
。这导致调用updateConstraints
,这是我必须为自定义约束更新实现的函数。