今天在Xcoder6.1.1下遇到了UITableView的坑。运行时警告如下:
Warning once only: Detected a case where constraints ambiguously suggest a height of zero for a tableview cell's content view. We're considering the collapse unintentional and using standard height instead.
Google后得到解决方法:
- 1 在代码里面设置cell的默认高度
self.tableView.rowHeight = 44;
-
2 在Storyboard里面调整cell的高度,让它不等于44.
-
3 实现tableview的delegate方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
上面的方法的确能够避免警告的产生
但是,如果你的cell不等于44,而且autolayout布局不完美的话,cell是实际高度还是44,问题并没有解决!
举例说明:
-
需要一个高度为20的cell来充当分割view,设置cell的高度为20,里面没有subview,实际显示为44.
-
继续上面的设置,添加一个subview,添加约束‘上下左右’都距离superview为0,实际显示44.
-
继续上面的设置,去掉所有的subview,重新添加一个UILabel,添加约束‘上下左右’都距离superview为0,实际显示20.
-
继续上面的设置,去掉UILabel的text,实际显示44.
-
继续上面的设置,重新加上text,设置hide为true,实际显示变回20
-
继续上面的设置,cell高度减小到4, 实际显示还是20。 将UILabel的字体大小改到1后,显示为4. 这个时候如果再把cell高度改回20,实际显示高度还是4. 字体大小再改回10后,实际显示高度正常。这么看来这种方法,subview的显示内容回影响到superview。先这样吧!
总结
-
警告没有了不意味着程序运行就正常了!
-
添加‘上下左右’约束,确保superview被撑住
-
检查subview的显示属性
网友评论