Как я могу изменить макет потока представления коллекции на композиционный макет из раскадровки. Итак, у меня есть класс 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
}
Вот так я добавляю контроллеры в контроллер панели вкладок.
viewControllers = [
SearchCollectionVC(),
//createNewViewController(storyboardIdentifier: .searchNav),
createNewViewController(storyboardIdentifier: .todayNav),
createNewViewController(storyboardIdentifier: .appsNav)
]
Если я пытаюсь добавить SearchCollectionV C с закомментированной строкой, мое приложение вылетает. Он выполняет строку fatalError () в требуемой инициализации из SearchCollectionV C. Вот как я создаю макет.
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
}
Теперь я попытался сделать это в SearchCollectionV C viewDidLoad ().
collectionView.collectionViewLayout = SearchCollectionVC.createCollectionLayout()
Это работает со строкой комментария и без в этом. Дело в том, что когда я поворачиваю экран, это происходит.
Этого не происходит, когда я добавляю контроллер с помощью SearchCollectionV C () и при использовании init. Теперь я не знаю, почему это происходит. Может кто-нибудь, пожалуйста, дайте мне знать, как я смогу инициализировать контроллер раскадровки и изменить макет на созданный мной композиционный макет, не разрезая представление коллекции пополам. Спасибо