Swift 4.0中UICollectionView非空布局参数初始化错误求助
解决UICollectionView初始化必须传入非nil布局参数的问题
嗨,这个问题我之前在Swift开发中也碰到过,给你几个亲测有效的解决思路:
代码实例化时务必传入布局参数
如果你是通过代码直接创建UICollectionViewController实例,绝对不能用无参数的init(),必须显式传入一个UICollectionViewLayout对象。比如:// 先创建布局(这里用FlowLayout举例,你也可以用自定义布局) let flowLayout = UICollectionViewFlowLayout() flowLayout.itemSize = CGSize(width: 100, height: 100) flowLayout.minimumInteritemSpacing = 10 // 用布局参数初始化你的CollectionViewController let collectionVC = YourCollectionVC(collectionViewLayout: flowLayout)检查XIB/Storyboard中的布局配置
如果你是通过cmd+N创建时勾选了「Also create XIB file」,打开对应的XIB文件:- 选中里面的UICollectionView
- 切换到右侧的「Attributes Inspector」面板
- 确认「Layout」选项不是空白的,选择「Flow Layout」或者你需要的自定义布局
如果是用Storyboard创建的VC,同样在Storyboard里选中CollectionView,检查并设置好Layout属性。
重写子类的初始化方法
如果你自定义了UICollectionViewController子类,确保所有初始化路径都传入了布局参数。比如:class YourCollectionVC: UICollectionViewController { // 自定义无参数初始化 init() { let layout = UICollectionViewFlowLayout() super.init(collectionViewLayout: layout) } // 从XIB/Storyboard加载时的初始化 required init?(coder: NSCoder) { let layout = UICollectionViewFlowLayout() super.init(coder: coder, collectionViewLayout: layout) } }这样不管是代码创建还是从界面文件加载,都能保证有合法的布局参数。
这个错误的核心原因就是UICollectionView的初始化必须依赖一个非nil的布局对象,而UICollectionViewController内部会直接初始化它的collectionView,所以必须在VC初始化阶段就把布局传进去,不能跳过这一步。
内容的提问来源于stack exchange,提问作者Steven Gardner
相关产品推荐
相关产品推荐

