Xcode 使用XIB--“初始化集合视图”;布局对象必须为非nill“;

Xcode 使用XIB--“初始化集合视图”;布局对象必须为非nill“;,xcode,collectionview,Xcode,Collectionview,我在这里看到过一个类似的问题,关于以编程方式创建集合视图,而不是使用IB、nibs或xibs或我应该称之为它的任何东西 我的理解是,当使用XIB时,XIB中的对象将由IB自动实例化。因此,对于我使用XIB创建的另一个collectionView,它可以在不以编程方式实例化flow layout对象的情况下工作。但是,第二个视图因错误而崩溃: “NSInvalidArgumentException”,原因:“UICollectionView必须使用非nil布局参数初始化” 我的第一个想法是allo

我在这里看到过一个类似的问题,关于以编程方式创建集合视图,而不是使用IB、nibs或xibs或我应该称之为它的任何东西

我的理解是,当使用XIB时,XIB中的对象将由IB自动实例化。因此,对于我使用XIB创建的另一个collectionView,它可以在不以编程方式实例化flow layout对象的情况下工作。但是,第二个视图因错误而崩溃:

“NSInvalidArgumentException”,原因:“UICollectionView必须使用非nil布局参数初始化”

我的第一个想法是alloc/init一个新的流布局,并将其添加到collectionViews布局对象中,如
self.collectionView.collectionViewLayout=newLayout
所示。(我在集合视图控制器中)。但是,此属性似乎是只读的。因为我使用的是XIB,所以我假设xcode在幕后进行布局,但这无助于找出哪里出了问题

我的第一个想法是分配/初始化一个新的流布局,并将其添加到collectionViews布局对象中


可能是相反的顺序:首先初始化FlowLayout实例,然后使用frame和layout初始化CollectionView

如果有人无意中发现了这一点,我想我已经找到了解决方案。假设您在XIB中设置了一个集合视图布局,我已经向Apple确认,调用
UICollectionViewController.init()
UICollectionViewController.init(nibName:nil,bundle:nil)
会导致集合视图的布局无法设置

解决方法:


要解决此问题,请使用
UICollectionViewController.init(nibName:“NameOfMyXIB”,bundle:nil)
,它将适当地设置集合视图的布局。

但是集合视图正在由xib初始化。如果我在collectionView控制器的viewDidLoad中设置集合视图的layout属性,它是只读的。文档明确指出,collectionView必须使用非nil FlowLayout初始化。要么在IB中创建这两个对象,要么都以编程方式创建。我有两个视图控制器,都带有一个XIB文件。父视图控制器可以正常启动,但子视图由于nill布局而崩溃。我检查了实用程序中的每一页,两个XIB都是相同的。不知何故,工作视图控制器的XIB正确地设置了布局,而子视图控制器没有。对“布局”运行项目级搜索不会产生任何结果,因此我知道布局正在实例化并添加到幕后的集合视图中。