我知道有一个帖子:adding to UICollectionViewCell contentView via nib问这个,但答案不正确。将UILabel直接拖动到单元格的xib中,Label将被添加到单元格本身,而不是其contentView:
(lldb) po self.subviews
<__NSArrayM 0x7fa9b1c58a20>(
<UIView: 0x7fa9b1c77540; frame = (0 0; 64 64); gestureRecognizers = <NSArray: 0x7fa9b1c66260>; layer = <CALayer: 0x7fa9b1c352f0>>,
<UILabel: 0x7fa9b1c7a880; frame = (0 15; 64 18); text = 'market share'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7fa9b1c6f820>>,
<UILabel: 0x7fa9b1c77c30; frame = (0 38; 64 22); text = '17.06'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x7fa9b1c36fe0>>
)
(lldb) po self.contentView.subviews
<__NSArray0 0x7fa9b1d02740>(
)
在XCode 7上仍然如此,示例:https://github.com/liuxuan30/autolayoutProblemOniOS9。
所以我又问了一个好的答案。
行为与UITableViewCell不同,后者将直接在xib中显示contentView。不知道为什么Apple会这样做,并在UICollectionViewCell doc https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICollectionViewCell_class/中说:
要配置单元格的外观,请将显示数据项内容所需的视图添加为contentView属性中视图的子视图。不要直接将子视图添加到单元格本身。
答案 0 :(得分:12)
在联系Apple的技术支持后,他们告诉我,如果通过xib将其添加到手机的内容视图中,但如果我对其进行编程则不会被添加,除非我手动将它们添加为cell.contentView的子视图。
有一点需要注意的是,如果我们通过xib添加子视图但它不属于contentView,我们需要删除xib上的视图并将新的UICollectionViewCell拖到xib上。 contentView不会显示在xib上,这与UITableViewCell不同。