UICollectionView пользовательский макет зависимый от типа ячейки атрибут - PullRequest
0 голосов
/ 25 апреля 2018

Представление моей коллекции имеет динамический макет и несколько типов ячеек / заголовков, и я хотел бы применить цвет фона только к определенным типам заголовков.Я безуспешно пытался определить IndexPath этих заголовков во время выполнения:

class MyCustomLayout: UICollectionViewFlowLayout {

    private var backgroundAttrs = [UICollectionViewLayoutAttributes]()

    override func prepare() {
        super.prepare()

        guard let numberOfSections = collectionView?.numberOfSections else { return }            
        backgroundAttrs.removeAll()

        for section in 0 ..< numberOfSections {
            if let header = collectionView?
                .supplementaryView(forElementKind: UICollectionElementKindSectionHeader, 
                    at: IndexPath(item: 0, section: section)) as? HeaderThatNeedsBackground, 
               let attr = getBackgroundAttribute(forSection: section) {
                   backgroundAttrs.append(attr)
            }
        }
    }
    ...
}

supplementaryView(forElementKind:, at:) продолжает давать мне nil, поэтому цикл никогда не выполняется.Я думаю, что клетки еще не созданы в данный момент?Буду признателен за любые советы о том, как выборочно применять атрибут макета на основе типа ячейки / заголовка

1 Ответ

0 голосов
/ 26 апреля 2018

Прежде всего, вы не должны вызывать методы представления коллекции, которые извлекают ячейки или дополнительные представления, поскольку представление коллекции использует макет (тот, который вы реализуете) для получения информации для этих элементов.Вы можете прочитать, как правильно создать подкласс UICollectionViewLayout в этой ссылке .

В вашем конкретном случае вам необходимо переопределить функцию:

layoutAttributesForSupplementaryView(ofKind:at:)

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