ScrollView позволяет убирать / расширять представление при прокрутке (как в приложении AirBnb) - PullRequest
1 голос
/ 25 октября 2019

Я усердно работаю, чтобы получить эффект при прокрутке на collectionView. У меня есть представление, которое находится наверху моего UICollectionView, и я хочу, чтобы оно исчезло при прокрутке вниз и чтобы оно появилось при прокрутке вверх. При прокрутке вниз, я хочу, чтобы contentOffset оставался таким, каким он есть до тех пор, пока размер моего вида сверху не станет равным 0, и поэтому я хочу, чтобы contentOffset оставался таким же, как при прокрутке вверх, пока не достигнет максимальной высоты моего просмотра. .

Я нашел ту статью, которая представляет собой очень простой пример того, что я ищу: https://blog.usejournal.com/how-to-collapse-a-custom-header-view-in-ios-while-scrolling-5e0949c64ecd

В этой статье нет решения для отображения или исчезновения вида, когда всередина моего collectionView.

Эффект, который я ищу, - это эффект, который присутствует в приложении AirBnB (ниже приведен скриншот).

Также в верхнем или нижнем отскоках размерс моей точки зрения должно быть либо максимальная высота или 0.

Вот если бы то, что я написал на данный момент, но я действительно застрял. Любые идеи, чтобы помочь?

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    guard let lastContentOffset = self.lastContentOffset else { return }
    let currentViewHeight = self.containerHidableFields.bounds.height
    let velocity = scrollView.panGestureRecognizer.velocity(in: self)
    let translation = scrollView.panGestureRecognizer.translation(in: self)
    let translationY = translation.y - self.lastTranslation.y

    var newHeight: CGFloat
    if self.lastVelocity.y.sign != velocity.y.sign || self.lastVelocity.y == 0.0 {
        scrollView.panGestureRecognizer.reset()
        self.lastTranslation = .zero
    }

    let height = currentViewHeight+translationY
    if scrollView.isBouncingTop() {
        newHeight = self.heightHidableContainer
    }
    else if scrollView.isBouncingBottom() {
        newHeight = 0.0
    }
    else if velocity.y > 0, currentViewHeight < self.heightHidableContainer {
        newHeight = max(height, 0.0)
        scrollView.setContentOffset(lastContentOffset, animated: false)
    }
    else if velocity.y < 0, currentViewHeight > 0.0 {
        newHeight = min(height, self.heightHidableContainer)
        scrollView.setContentOffset(lastContentOffset, animated: false)
    }
    else {
        newHeight = min(max(height, 0.0), self.heightHidableContainer)
    }

    self.containerHidableFields.snp.updateConstraints { $0.height.equalTo(newHeight) }
    self.lastContentOffset = scrollView.contentOffset
    self.lastVelocity = velocity
    self.lastTranslation = translation
}

screenShot приложение Airbnb

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