Swift 使用情节提要将集合视图布局设置为合成布局

Swift 使用情节提要将集合视图布局设置为合成布局,swift,uicollectionview,uicollectionviewcompositionallayout,Swift,Uicollectionview,Uicollectionviewcompositionallayout,如何将集合视图流布局从故事板更改为合成布局。所以我有一个TabBarController类,它包含3个导航控制器,我从故事板初始化它,如下所示 //Storyboard is an enum that contains strings IDs that belong to controllers from main storyboard. private func createNewViewController(storyboardIdentifier: Storyboard.Controlle

如何将集合视图流布局从故事板更改为合成布局。所以我有一个TabBarController类,它包含3个导航控制器,我从故事板初始化它,如下所示

//Storyboard is an enum that contains strings IDs that belong to controllers from main storyboard.
private func createNewViewController(storyboardIdentifier: Storyboard.Controller) -> UIViewController {
    let controller = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: storyboardIdentifier.indentifer)

    return controller
}
 collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: SearchCollectionVC.createCollectionLayout())
这就是我如何将控制器添加到选项卡栏控制器的方法

viewControllers = [
        SearchCollectionVC(),
        //createNewViewController(storyboardIdentifier: .searchNav),
        createNewViewController(storyboardIdentifier: .todayNav),
        createNewViewController(storyboardIdentifier: .appsNav)

    ]
如果我尝试添加带有注释行的SearchCollectionVC,我的应用程序将崩溃。它在SearchCollectionVC中所需的init中执行fatalError()行。这就是我创建布局的方式

init() {
    super.init(collectionViewLayout: SearchCollectionVC.createCollectionLayout())
}


required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

static func createCollectionLayout() -> UICollectionViewCompositionalLayout {
    let itemSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .fractionalHeight(1))
    let item = NSCollectionLayoutItem(layoutSize: itemSize)

    let grupSize = NSCollectionLayoutSize(widthDimension: .fractionalWidth(1), heightDimension: .absolute(250))
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: grupSize, subitems: [item])

    let section = NSCollectionLayoutSection(group: group)
    section.interGroupSpacing = 20

    let layout = UICollectionViewCompositionalLayout(section: section)

    return layout
}
现在我尝试在SearchCollectionVC viewDidLoad()中执行此操作

这适用于注释行,而不适用于init。问题是当我旋转屏幕时,会发生这种情况


当我使用SearchCollectionVC()添加控制器和使用init时,不会发生这种情况。现在,我不知道为什么会这样。有人能告诉我如何初始化故事板控制器并将布局更改为我创建的合成布局,而不将集合视图切成两半。谢谢你刚刚了解了如何做。必须像这样创建一个新的集合视图

//Storyboard is an enum that contains strings IDs that belong to controllers from main storyboard.
private func createNewViewController(storyboardIdentifier: Storyboard.Controller) -> UIViewController {
    let controller = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewController(withIdentifier: storyboardIdentifier.indentifer)

    return controller
}
 collectionView = UICollectionView(frame: view.bounds, collectionViewLayout: SearchCollectionVC.createCollectionLayout())