iOS UITableView AutoLayout约束错误,奇怪的行为

时间:2014-11-06 11:16:38

标签: ios uitableview autolayout

我在iOS 7.1中看到了一些奇怪的行为。 iOS 8中也不会出现同样的情况。

当加载UITableViewController时,我遇到了一堆没有任何意义的约束错误(无法同时满足约束)。我熟悉约束语言以及如何调试这些错误,但对于我的生活,我无法理解正在发生的事情。

我的桌子上有一堆自定义单元格。出于调试目的,我将单元格减少到一个以隔离约束错误。渲染时,表格显示如下:显示单个自定义单元格:

Table cell rendered

约束错误是:

"<NSLayoutConstraint:0x7a098570 H:[UIImageView:0x7a0984c0(60)]>",
"<NSLayoutConstraint:0x7a098aa0 H:|-(8)-[UIImageView:0x7a0984c0]   (Names: '|':UITableViewCellContentView:0x7a097ed0 )>",
"<NSLayoutConstraint:0x7a098b30 H:[UILabel:0x7a097f70]-(12)-|   (Names: '|':UITableViewCellContentView:0x7a097ed0 )>",
"<NSLayoutConstraint:0x7a098b60 H:[UIImageView:0x7a0984c0]-(8)-[UILabel:0x7a097f70]>",
"<NSAutoresizingMaskLayoutConstraint:0x79ec3c60 h=--& v=--& H:[UITableViewCellContentView:0x7a097ed0(0)]>"

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x7a098570 H:[UIImageView:0x7a0984c0(60)]>

最令人困惑的是:

H:[UITableViewCellContentView:0x7a097ed0(0)]

看起来单元格的内容视图的宽度为零?!?

由于此自动布局会破坏图像宽度约束(宽度60)。这些错误不断破坏与零宽度内容视图相对的每个约束。一旦错误完成输出,正确显示单元格。

单元格由imageview和三个uilabels组成:

Cell design

我无法理解为什么contentview的宽度为零或者为什么会出现这些约束错误。在iOS 7.1上运行模拟器或设备会出现错误,在iOS 8上运行模拟器或设备时不会出现错误!

有没有人知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

我找到了答案。

我已经在iOS7中启动了该项目,然后在iOS 8出现时我升级了xcode。升级后创建的表视图是表现出这种行为的表视图。

我发现在表视图控制器的cellForRowAtIndexPath方法中,如果我在将单元格出列后放置此代码:

cell.contentView.frame = cell.bounds;
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

解决了这个问题。