我在iOS 7.1中看到了一些奇怪的行为。 iOS 8中也不会出现同样的情况。
当加载UITableViewController时,我遇到了一堆没有任何意义的约束错误(无法同时满足约束)。我熟悉约束语言以及如何调试这些错误,但对于我的生活,我无法理解正在发生的事情。
我的桌子上有一堆自定义单元格。出于调试目的,我将单元格减少到一个以隔离约束错误。渲染时,表格显示如下:显示单个自定义单元格:
约束错误是:
"<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组成:
我无法理解为什么contentview的宽度为零或者为什么会出现这些约束错误。在iOS 7.1上运行模拟器或设备会出现错误,在iOS 8上运行模拟器或设备时不会出现错误!
有没有人知道为什么会发生这种情况?
答案 0 :(得分:0)
我找到了答案。
我已经在iOS7中启动了该项目,然后在iOS 8出现时我升级了xcode。升级后创建的表视图是表现出这种行为的表视图。
我发现在表视图控制器的cellForRowAtIndexPath方法中,如果我在将单元格出列后放置此代码:
cell.contentView.frame = cell.bounds;
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
解决了这个问题。