Как установить contentOffset collectionView, чтобы ячейка центрировалась? - PullRequest
1 голос
/ 07 ноября 2019

Моя настройка:

  • A ScrollView с включенной подкачкой. У меня есть 3 подпредставления (для представления страниц)

  • CollectionView с 3 ячейками с метками внутри них. Эти ярлыки содержат названия для моих 3 страниц.

Что я пытаюсь сделать:

Когда страница прокручивается, яхотите, чтобы связанный заголовок страницы привязывался к центру. Названия в настоящее время привязываются к левому краю, что не совсем то, что я хочу.

Как все выглядит в настоящее время:

enter image description here

Мой код:

func scrollViewDidScroll(_ scrollView: UIScrollView) {

    // currentPage Int 0, 1, and 2 represent my 3 pages
    let indexPath = IndexPath(item: scrollView.currentPage, section: 0)

    // This is my collectionView with the cells that contain titles
    let collectionView = self.homeViewModel.menuTabsCollectionView

    // Here I get the width of the cell for the current page
    guard let currentCellWidth = collectionView.cellForItem(at: indexPath)?.frame.size.width else {
        return
    }

    // Disable vertical scroll
    scrollView.contentOffset.y = 0

    print("OFFSET \(scrollView.contentOffset.x)")
    print("CELL WIDTH \(currentCellWidth)")

    if scrollView.currentPage == 0 {

        collectionView.contentOffset.x = scrollView.contentOffset.x / 3
    }

    if scrollView.currentPage == 1 {

        collectionView.contentOffset.x = scrollView.contentOffset.x / 3
    }

    if scrollView.currentPage == 2 {

        collectionView.contentOffset.x = scrollView.contentOffset.x / 3
    }
}

На данный момент я заблокировал contentOffset scrollViews для contentOffset collectionView, и я замедлил скорость прокрутки collectionView вместе спредставление прокрутки.

Мне нужно использовать ширину ячейки collectionView вместе с contentOffset scrollView, чтобы выяснить, насколько collectionView должен перемещаться пропорционально scrollView, и иметь заголовок для каждой страницы. в конечном итоге окажемся в центре к тому времени, когда страница закончит прокрутку.

Причина, по которой я использую операторы if для каждой страницы, заключается в том, что ширина, используемая в формуле, будет отличаться в зависимости от того, на какую страницу выполняется прокрутка.

Не могу понять, как расположить заголовки в центре. Если я использую метод делегата scrollToCellAtIndexPath, я теряю эффект параллакса.

Я бы очень признателен за некоторые вводимые данные / ответы здесь.

Заранее спасибо

...