Настройка макета представления коллекции на композиционный макет с использованием раскадровки - PullRequest
2 голосов
/ 28 февраля 2020

Как я могу изменить макет потока представления коллекции на композиционный макет из раскадровки. Итак, у меня есть класс 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()

Это работает со строкой комментария и без в этом. Дело в том, что когда я поворачиваю экран, это происходит.

enter image description here

Этого не происходит, когда я добавляю контроллер с помощью SearchCollectionV C () и при использовании init. Теперь я не знаю, почему это происходит. Может кто-нибудь, пожалуйста, дайте мне знать, как я смогу инициализировать контроллер раскадровки и изменить макет на созданный мной композиционный макет, не разрезая представление коллекции пополам. Спасибо

1 Ответ

0 голосов
/ 28 февраля 2020

Только что узнал, как это сделать. Пришлось создать новый вид коллекции вот так.

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