Как реализовать горизонтально прокручиваемый вид коллекции с заголовком сверху? - PullRequest
1 голос
/ 27 февраля 2020

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

Вот как я удаляю заголовок:

    func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView {
        let header = dequeueReusableSupplementaryView(ofKind: UICollectionView.elementKindSectionHeader, withReuseIdentifier: identifier, for: indexPath) as! HeaderView
        header.setWidth(to: headerWidth)
        return header
    }

Размер заголовка:

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
        return CGSize(width: collectionView.frame.width, height: 12)
    }

Кроме этого, единственными другими свойствами, которые я инициализирую, являются направление прокрутки и вставки представления коллекции

1 Ответ

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

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

Если вы хотите отобразить свой reusable view в правой части каждого раздела, вы можете использовать UICollectionView.elementKindSectionFooter .

Но если вы хотите отображать reusable view между каждым разделом, вы можете установить размер представления заголовка в самом первом разделе на .zero.

Вы можете манипулировать размером каждого представления заголовка с помощью функции referenceSizeForHeaderInSection например, так:

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, referenceSizeForHeaderInSection section: Int) -> CGSize {
        if section == 0 {
            return .zero
        }
        return CGSize(width: collectionView.frame.width, height: 12)
    }

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

...