在某些情况下禁用滚动视图右侧

Posted

技术标签:

【中文标题】在某些情况下禁用滚动视图右侧【英文标题】:Disabling the scrollview right side at some conditions 【发布时间】:2015-10-15 06:52:49 【问题描述】:

我正在实现具有 10 个自定义视图的水平滚动视图,每个视图具有不同的 UI。当用户向左滚动时,我正在滚动到下一个视图,而在向右滚动到上一个视图时它工作正常,直到现在。在某些情况下,我必须限制向左滚动并仅启用向右滚动。 在下面的方法中,我得到了禁用右滚动的场景

-(void)scrollEnabled:(BOOL)scrollEnable

    self.scrollView.scrollEnabled = scrollEnable;
    // scrollEnable comes NO at some conditions here i have to disable the right scrolling.
    if(!scrollEnable)
    
        // Now i am registering the pan gesture and detecting the right swiping
        UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(detectRightScroll:)];
        [self.panView addGestureRecognizer:panGesture];

    


- (void) detectRightScroll:(UIPanGestureRecognizer *)gesture 

    CGPoint translation = [gesture translationInView:gesture.view];
    if(translation > 0) // here detecting the right scrolling and changing the scrollview content offset
    
        [scrollView setContentOffset: CGPointMake(scrollView.contentOffset.x-translation, 0)];
        view is scrolling but not scrolling like scrooview
    

我们可以在不注册手势的情况下实现我的要求吗? 我从过去 4 天开始就遇到了这个问题,但无法解决。 任何帮助都将不胜感激。 谢谢。

【问题讨论】:

【参考方案1】:

如果方向错误,请尝试重置UIScrollViewcontentOffset(或禁用该方向)

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    if (scrollView.contentOffset.x > stopPosition)  // or (scrollView.contentOffset.x < stopPosition)
        [scrollView setContentOffset:CGPointMake(stopPosition, 0)];
    

【讨论】:

您好,感谢您的回复。只是为了澄清,我正在实现水平滚动,但您更新了用于垂直滚动的 y 位置。为什么 抱歉,我没注意到。但我希望你能理解我的回答。我编辑了我的答案。【参考方案2】:

尝试使用

 scrollViewDidEndDecelerating:(UIScrollView )scrollView and - (void)scrollViewDidEndDragging:(UIScrollView )scrollView willDecelerate:(BOOL)decelerate

-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView

        int xFinal = self.yourScroll.contentOffset.x ;
        int viewIndex = xFinal / (yourImageSize);
        xFinal = viewIndex *  yourImageSize ;
        [self.yourScroll setContentOffset:CGPointMake(xFinal, 0) animated:YES];





- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

        int xFinal = self.yourScroll.contentOffset.x  ;
        int viewIndex = xFinal / yourImageSize ;
         xFinal = viewIndex *  yourImageSize;
        [self.yourScroll setContentOffset:CGPointMake(xFinal, 0) animated:YES];

您将只能在图像数组计数的限制内滚动。

【讨论】:

您好 ErmineSoft 我会实施您的建议并让您知道谢谢

以上是关于在某些情况下禁用滚动视图右侧的主要内容,如果未能解决你的问题,请参考以下文章

iOS滚动视图禁用自动滚动到顶部

禁用列表视图中的滚动

IOS:在带有动画的 ImageView 下禁用滚动视图

jQuery FullCalendar:在议程视图中禁用滚动?

在 SwiftUI 列表/表单中禁用滚动

嵌套滚动视图的滚动无法正常工作