仅当父滚动视图到达结束时滚动子滚动视图

Posted

技术标签:

【中文标题】仅当父滚动视图到达结束时滚动子滚动视图【英文标题】:Scroll child scrollview only when parent scroll view reaches end 【发布时间】:2017-01-04 10:34:00 【问题描述】:

我有一个父 UIScrollView 和一个 UICollectionView 里面的 UIScrollView。 我希望 UICollectionView 滚动仅在父 UIScrollView 滚动结束时开始。任何人都可以帮助我吗?

【问题讨论】:

在scrollview delagates方法中放入一个codition并检查您当前的滚动是否是您的第一个滚动的结尾,然后禁用它并启用子滚动 如果当前scrollview的contentOffSet小于这个scroll的最大offset,你需要关闭collection view的滚动 您能否展示一下您在解决问题时可能尝试过的所有方法? 【参考方案1】:

在 viewDidLoad 中,禁用 Collectionview 滚动。

self.collectionView.scrollEnabled = NO;

现在,使用滚动视图的委托来检测滚动视图的底部,然后启用 CollectionView 滚动。

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
    float bottomEdge = scrollView.contentOffset.y + scrollView.frame.size.height;
    if (bottomEdge >= scrollView.contentSize.height) 
       self.collectionView.scrollEnabled = YES;
    

希望它会起作用。

【讨论】:

【参考方案2】:

最初设置子滚动视图yourScrollView.scrollEnabled = NO; 也将标签添加到您的滚动视图。 1个给父母,2个给孩子。

使用此代码了解您是否位于 ScrollView 的底部

-(void)scrollViewDidScroll: (UIScrollView*)scrollView

    if(scrollView.tag==1)
    
    float scrollViewHeight = scrollView.frame.size.height;
    float scrollContentSizeHeight = scrollView.contentSize.height;
    float scrollOffset = scrollView.contentOffset.y;

    if (scrollOffset == 0)
    
        // then we are at the top
    
    else if (scrollOffset + scrollViewHeight == scrollContentSizeHeight)
    
        //Handle Code to activate the child scrollView.
        // then we are at the end
    
    

希望这会有所帮助。快乐编码。

参考SO Post

【讨论】:

以上是关于仅当父滚动视图到达结束时滚动子滚动视图的主要内容,如果未能解决你的问题,请参考以下文章

Swift:仅当键盘隐藏 TextField 或 Button 时滚动视图

如何在 SwiftUI 中查找滚动视图内容是不是已到达内容的末尾

圆形滚动视图

当列表视图滚动到达末尾时添加列表视图页脚

iOS 嵌套滚动视图——一直滚动到超级视图?

在调整滚动视图大小时滚动到滚动视图页面