折叠标题视图 - 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 在到达底部时停止滚动的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView,到达滚动视图的底部

iOS Swift ScrollView、UITableView、滚动区域

水平 ScrollView (SwiftUI) 中的动画展开/折叠组

在 ScrollView / GeometryReader 视图中将矩形与底部对齐不起作用

如何在 Swift ui 底部使用 ScrollView 启动视图?

我们如何快速在表格视图底部添加展开和折叠单元格