自定义包含UICollectionView的UIView子类后CollectionViewCell不显示怎么办
可能的遗漏配置如下
- 未给自定义类内部的
myCollectionView添加视图约束:你贴出的MyCollectionView代码中只完成了myCollectionView的初始化,没有执行addSubview(myCollectionView)操作,也没有给它添加铺满父视图的约束,你看到的黑色只是MyCollectionView本身的背景,内部的UICollectionView根本没有加入视图层级。 - 错误使用
UICollectionViewLayout抽象基类:初始化UICollectionView时不能直接传入UICollectionViewLayout()实例,这是布局的抽象基类,必须使用它的子类(比如常用的UICollectionViewFlowLayout),否则系统无法计算cell的布局位置,自然不会渲染cell。 - 数据源方法返回值异常:
UICollectionViewDataSource的两个必选方法collectionView(_:numberOfItemsInSection:)、collectionView(_:cellForItemAt:)你虽然声明了默认实现,但是如果前者返回值为0,或者后者没有正确返回复用的cell实例,都会导致cell不显示。 - 未设置cell尺寸:如果使用
UICollectionViewFlowLayout,要么直接设置itemSize属性给所有cell统一尺寸,要么实现UICollectionViewDelegateFlowLayout的collectionView(_:sizeForItemAt:)方法返回每个cell的尺寸,如果cell尺寸为0也不会被渲染。 - 复用标识不匹配:你后续新注册自定义cell时用的标识,和
cellForItemAt方法中复用cell的标识不一致的话,会无法正确创建cell实例。 - 自定义
MyCollectionView本身约束异常:你在MainViewController中调用的setUpConstraintsAndViews()方法如果没有给collectionView设置正确的宽高约束,MyCollectionView本身尺寸为0的话,内部内容自然不可见。 - 数据源为空:如果你的cell数量是根据数据源数组的count返回的,数组没有赋值、为空的话也不会显示cell。
- cell视觉效果和背景重合:如果cell的背景色和
MyCollectionView的黑色背景完全一致,就算cell正常渲染你也无法肉眼识别。
内容的提问来源于stack exchange,提问作者Artun
相关产品推荐
相关产品推荐

