Быстрое добавление UICollectionView вместо заголовка панели навигации - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь добавить UICollectionView на панель навигации вместо заголовка навигации, как это делается в собственном приложении Сообщения в iOS. Вот насколько я получил:

let navigationBar = UINavigationBar()

    var collectionview: UICollectionView!
    let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
    layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    layout.itemSize = CGSize(width: navigationBar.frame.width, height: navigationBar.frame.height)

    collectionview = UICollectionView(frame: navigationBar.frame, collectionViewLayout: layout)
    collectionview.dataSource = self
    collectionview.delegate = self
    collectionview.register(UserImagesCollectionViewCell.self, forCellWithReuseIdentifier: "userCell")
    collectionview.showsVerticalScrollIndicator = false
    collectionview.backgroundColor = .red

    let navigationItem = UINavigationItem()
    navigationItem.title = ""
    navigationItem.titleView = collectionview

    navigationBar.items = [navigationItem]

Этот код выполняется без ошибок, но ничего не отображается на контроллере представления. Есть кое-что, что я здесь упускаю, и я не могу указать на это. Любая помощь?

EDIT: После получения справки от ответа Майка, вот код, который я получил для создания uicollectionview внутри моей панели навигации с пользовательским xib-файлом ячейки.

func setupCustomCollectionView() {
    if let navigationBar = self.navigationController?.navigationBar {
        let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
        layout.itemSize = CGSize(width: navigationBar.frame.width / 4, height: navigationBar.frame.height)

        collectionview = UICollectionView(frame: navigationBar.frame, collectionViewLayout: layout)
        collectionview.dataSource = self
        collectionview.delegate = self
        let nibCell = UINib(nibName: "UserImagesCollectionViewCell", bundle: nil)
        collectionview.register(nibCell, forCellWithReuseIdentifier: "userCell")

        collectionview.showsVerticalScrollIndicator = false
        collectionview.backgroundColor = .red

        self.navigationController?.navigationBar.topItem?.titleView = collectionview
    }
}

1 Ответ

0 голосов
/ 08 мая 2018

Мне удалось отобразить представление коллекции, используя это:

self.navigationController?.navigationBar.topItem?.titleView = collectionview

... вместо ваших последних четырех строк кода, которые создают элемент навигации.

Я заметил, что, поскольку layout.itemSize настроен так, чтобы занимать всю панель навигации, метод cellForItemAt вызывался только один раз, даже когда я указал большее число в numberOfItemsInSection.

Изменяя layout.itemSize на меньшее значение, cellForItemAt вызывался более одного раза.

...