Представление заголовка UICollectionView продолжает дублироваться при прокрутке - PullRequest
0 голосов
/ 18 июня 2019

Я хотел реализовать иерархию представлений, подобную следующей, чтобы можно было прокручивать ВСЁ представление:

UIScrollView

  • Представление изображения

  • Представление коллекции

Но многие здесь говорят, что лучше использовать заголовок, который идет вместе с представлением коллекции.Я сделал это, но теперь у меня есть новая проблема: когда я прокручиваю представление коллекции, все конфигурации, которые я сделал для ячейки заголовка в функции viewForSupplementaryElementOfKind, дублируются (например: если я программно создаю новое представление в функции viewForSupplementaryElementOfKind,это представление будет продолжать создаваться при прокрутке)

Я понимаю, что это происходит, потому что я снимаю заголовок с помощью dequeueReusableSupplementaryView.Но я пробовал искать в документах Apple, и нет других кодов, которые я мог бы использовать для создания экземпляра представления заголовка без повторного использования.

Есть ли способ создать контроллер представления, как описано выше, без использования UICollectionView?

Я попытался установить количество разделов равным 1, надеясь, что он будет использоваться только ОДИН РАЗ, но он не работает.

Редактировать: Также пытался установить размер заголовка с помощью UICollectionViewDelegateFlowLayouta и используяUICollectionView вместо UIViewController и UICollectionViewDataSource и т. Д.

func collectionView(_ collectionView: UICollectionView,
                                 viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView 
{
        switch kind {
        case UICollectionView.elementKindSectionHeader:
            guard
                let headerView = collectionView.dequeueReusableSupplementaryView(
                    ofKind: kind,
                    withReuseIdentifier: "DiscoverHeader",
                    for: indexPath) as? DiscoverHeader
                else {
                    fatalError("Invalid view type")
            }

            // Rotating arrow image
            headerView.arrowImg.transform = headerView.arrowImg.transform.rotated(by: CGFloat.pi/0.67)

            return headerView
        default:
            assert(false, "Invalid element type")
        }
}

1 Ответ

0 голосов
/ 18 июня 2019

Почему бы не UIImageView и UICollectionView внутри UIScrollView?

Вы можете определенно создать UIScrollView и добавить в него UIImageView и UICollectionView,

Но это не сработает, как ожидалось.Это потому, что вы встраиваете scrollView(UICollectionView) в другой scrollView.Scrolling collectionView по вертикали будет препятствовать scrolling внешнего scrollView.

Решение:

Попробуйте дать height из header view с использованием метода UICollectionViewDelegateFlowLayout's,

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
    return CGSize(width: collectionView.bounds.width, height: 100.0) //give the height as per your requirement...
}

Кроме того, установите contentMode из imageView как Aspect Fit / Aspect Fill.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...