Я усердно работаю, чтобы получить эффект при прокрутке на 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