如何修复似乎不影响自定义UITableViewCell布局的奇怪的NSLayoutConstraint错误

每当我的自定义UITableViewCells之一是由tableView:cellForRowAtIndexPath绘制:控制台吐出了一堆NSLayoutConstraint不一致。 我理解这些大部分:

Unable to simultaneously satisfy constraints. ...boring stuff.. "<NSLayoutConstraint:0x8b0eb60 V:|-(NSSpace(20))-[UILabel:0x8b0cb30] (Names: '|':UITableViewCellContentView:0x8bd7d40 )>", "<NSLayoutConstraint:0x8b0db70 V:[UILabel:0x8b0cb30]-(NSSpace(8))-[UITextView:0x91dba00]>", "<NSLayoutConstraint:0x8b0dba0 V:[UITextView:0x91dba00]-(NSSpace(20))-| (Names: '|':UITableViewCellContentView:0x8bd7d40 )>", "<NSLayoutConstraint:0x8b0d5a0 V:[UITextView:0x91dba00(1000)]>", "<NSAutoresizingMaskLayoutConstraint:0x8b00330 h=--& v=--& V:[UITableViewCellContentView:0x8bd7d40(44)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x8b0db70 V:[UILabel:0x8b0cb30]-(NSSpace(8))-[UITextView:0x91dba00]> 

或者至less我觉得我是这样做的。 真正使我困惑的是,我的UITableViewCell正在工作,没有任何约束似乎被打破。 我认为错误中列出的一些限制,特别是最后一个,是系统添加的限制。 这是可能的,如果我不使用.xibs,只有在代码中添加约束? 在错误的最后一行特别是因为我dynamic生成每个代码的高度,但我注意到在那里44,默认的单元格高度。

是否有一些这些限制默认添加,例如说,当我打电话[super updateConstraints] ? 我怎么去解决这些错误或找出他们来自哪里?

在一个侧面说明,我明白,浸入到核心文本执行比我的UITextView +自动布局解决scheme好得多。 现在我正在caching细胞高度。 但是,这些布局错误是否会在滚动时造成延迟,或者仅仅是因为我使用“自动布局”来计算屏幕上的每个单元格高度?

我已经发布了这些错误发生在Github上的项目,如果有人想下载和体验自己的古怪。

根据Aaron的build议,我手动更改单元格初始化时的高度,以便在自动布局进行计算时,约束条件可以对其进行排列。 在不初始设置内容框架的情况下,默认框架是{0, 0, 320, 44} 。 这太小,不能满足控制台中显示的限制和错误。

同样,重复使用单元格时,旧的contentView.frame(由“自动布局”计算)仍然存在。 如果你使用相同数量的文本,这很好 – 但是如果新的单元格需要更多的文本(因此一个更大的contentView.frame),我们遇到同样的问题,contentView.frame太小,不能满足约束。

因此,在我的自定义UITableViewCell中,我现在手动设置initWithStyle:的contentView.frame.height initWithStyle: prepareForReuse:为一个足够容纳任意数量文本的常量(足够用于App.netpost和一些额外的余量)。 当自动布局进行计算时,这确保没有错误。

我甚至可能会考虑把这个值设置得更高一些,甚至是dynamic的,以适应iOS 7中的dynamic文本。至于滚动,看起来这些错误并没有加剧波涛汹涌的滚动,这都是因为自动布局计算(I认为)。 下一步是计算单元格高度,当viewDidAppear:被调用…