2014-11-06 69 views
0

我在iOS 7.1中看到一些奇怪的行为。在iOS 8中也不会发生这种情况。iOS UITableView AutoLayout约束错误,奇怪行为

加载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)]

它出现的单元格的contentview有一个零宽度?!?

由于此自动布局打破了图像宽度约束(宽度60)。错误不断突破每一个违背零宽度contentview的约束。一旦错误输出完成后,单元显示正确。

细胞是由一个imageview的三个uilabels的:

Cell design

我不明白为什么会内容查看具有零宽度或为什么会发生这些约束错误。在iOS 7.1上的模拟器或设备上运行时会出现错误,在iOS 8上的模拟器或设备上运行时不会发生错误!

有没有人有线索为什么会发生这种情况?

回答

0

我找到了答案。

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

我发现,在表视图控制器的方法的cellForRowAtIndexPath如果我把这个代码出队的细胞后:

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

它固定的问题。