自定义cell时,[self addSubView:] 和 [s
来源:华拓网
在项目中,自定义cell几乎是不可避免的事情。这边我们自定义三个cell,每个cell都包含imgView和label,布局约束都一样。
-
cell1 : self addSubView
-
cell2: self.contentView addSubView
-
cell3: 使用xib可视化创建
Build以后,我们发现三个cell的显示完全一样。这时,我们设self.tableView.editing = YES
,再次Build,那么问题来了,如下图
当cell处于可编辑状态时,cell2和cell3布局是正常的,然而cell1布局却发生了错乱。这时我们再看cell3 xib画出来的cell的层级关系,如下图
xib画出来的cell,所有的控件都是在contentView下的。因此,cell3和cell2是一样的,添加在contenView下的控件是不会随cell的编辑状态发生错乱的。
我们再使用Reveal看下整体的图层关系。如下图。cell1中,直接使用self addSubView
方法,控件和contenView是同一层级下的。
官网对cell的contenView的解释如下,大意是:如果你想要添加额外的view来自定义cell的时候,你需要将它们添加在contentView上,以确保当cell切换到编辑模式时它们不会出现错乱。
那么结论来了:如果你的自定义cell是不可编辑的,那么使用[self addSubView:]
或[self.contentView addSubView:]
效果是一样的;但是如果是可编辑的,那么就必须要使用 [self.contentView addSubView:]