Xcoder6.1.1|Xcoder6.1.1 坑之一

今天在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的显示属性
  • 【Xcoder6.1.1|Xcoder6.1.1 坑之一】参考链接

    推荐阅读