折叠标题视图 - ScrollView 在到达底部时停止滚动
Posted
技术标签:
【中文标题】折叠标题视图 - ScrollView 在到达底部时停止滚动【英文标题】:Collapsing header view - ScrollView stops scrolling when it reaches bottom 【发布时间】:2020-03-17 16:48:34 【问题描述】:我已经实现了scrollViewDidScroll,以便在用户滚动scrollView 时标题视图(pagerView)将折叠。如果 scrollView 的内容足够长以使其滚动到屏幕顶部,则它可以完美运行。但是,如果内容较少,scrollView 会粘住,即一旦到达底部就停止滚动,并且不允许向下滚动。任何帮助都会很棒。
let pagerViewMaxHeight = 350
let pagerViewMinHeight = 44 + statusBarHeight
func scrollViewDidScroll(_ scrollView: UIScrollView)
let y = scrollView.contentOffset.y
let newPagerViewHeight = pagerViewHeight.constant - y
if newPagerViewHeight > pagerViewMaxHeight
pagerViewHeight.constant = pagerViewMaxHeight
else if newPagerViewHeight < pagerViewMinHeight
pagerViewHeight.constant = pagerViewMinHeight
else
pagerViewHeight.constant = newPagerViewHeight
scrollView.contentOffset.y = 0
【问题讨论】:
【参考方案1】:好的,我想通了。 scrollView 当然停止滚动,因为它的内容不大于视图本身。一旦滚动视图高度和标题视图与整个超级视图的高度匹配 - 滚动禁用。因此,我添加了另一个 else if 条件,仅当 scrollViewContentOffsetY 小于其绝对底部时才设置新的标题视图高度。
let absoluteBottom: CGFloat = scrollView.contentSize.height - scrollView.frame.size.height;
let scrollViewOffsetY = scrollView.contentOffset.y
let newPagerViewHeight = pagerViewHeight.constant - scrollViewOffsetY
if newPagerViewHeight > pagerViewMaxHeight
pagerViewHeight.constant = pagerViewMaxHeight
else if newPagerViewHeight < pagerViewMinHeight && scrollViewOffsetY < absoluteBottom
pagerViewHeight.constant = pagerViewMinHeight
if newPagerViewHeight < topBarHeight
UIView.animate(withDuration: 0.3)
self.titleLabel.transform = CGAffineTransform(scaleX: 0.001, y: 0.001)
self.title = space.title
// if scrollview offset is less than its absolute bottom, adjust pagerView height
else if scrollViewOffsetY < absoluteBottom && Int(scrollViewOffsetY) != Int(absoluteBottom)
pagerViewHeight.constant = newPagerViewHeight
scrollView.contentOffset.y = 0
【讨论】:
以上是关于折叠标题视图 - ScrollView 在到达底部时停止滚动的主要内容,如果未能解决你的问题,请参考以下文章
iOS Swift ScrollView、UITableView、滚动区域
水平 ScrollView (SwiftUI) 中的动画展开/折叠组
在 ScrollView / GeometryReader 视图中将矩形与底部对齐不起作用