滚动其子uiscrollview时如何防止滚动uiscrollview?

Posted

技术标签:

【中文标题】滚动其子uiscrollview时如何防止滚动uiscrollview?【英文标题】:how to prevent scrolling uiscrollview when scroll its sub-uiscrollview? 【发布时间】:2016-04-21 18:28:13 【问题描述】:

我在 main-ScrollView 中添加了一个 sub-ScrollView,它们都可以水平滚动。当我将 sub-scrollview 滚动到(右或左)边缘时,如果我继续向右或向左滚动,则会导致 main-scrollview 滚动。

我尝试在每个scrollview上使用scrollview的didScroll委托方法来解决它但是失败了,当main-ScrollView移动时,不会检测到子scrollview中的委托方法。 任何的想法?谢谢。

【问题讨论】:

【参考方案1】:

感谢 Alex 的回答,但是如果设置 superScrollView.pagingEnabled = true,exclusiveTouch 将不起作用。这是我的解决方案:

@interface SuperScrollView : UIScrollView

@end

@implementation SuperScrollView

//disable scroll when sub scrollView drags
-(UIView *)hitTest:(CGPoint) point withEvent:(UIEvent *)event 
    UIView *hint = [super hitTest:point withEvent:event];
    if(!hint)
        return nil;
    
    if([self isInSubScrollView:hint])
        self.scrollEnabled = false;
    
    else
        self.scrollEnabled = true;
    
    return hint;


-(BOOL)isInSubScrollView:(UIView*)view
    if([view isKindOfClass:UIScrollView.class])
        return view != self;
    
    while (view.superview) 
        view = view.superview;
        if([view isKindOfClass:UIScrollView.class])
            return view != self;
        
    
    return false;


@end

【讨论】:

【参考方案2】:

试试innerScrollView.exclusiveTouch = true

【讨论】:

刚刚注意到您在标签中提到了 ObjC。所以,innerScrollView.exclusiveTouch = YES; 嗨,Alex,感谢您的回复,但对我来说不起作用。

以上是关于滚动其子uiscrollview时如何防止滚动uiscrollview?的主要内容,如果未能解决你的问题,请参考以下文章

水平 UIScrollView 内部有垂直 UIScrollViews - 滚动外部水平视图时如何防止滚动内部滚动视图?

如何防止使用 UICollectionView 滚动 UIScrollView

滚动 UIScrollView 会更改其子视图框架

防止重叠的 UIScrollView 滚动

以编程方式布局 UIScrollView,并为其子视图添加了自动布局,但它不滚动

拖动子视图时防止 UIScrollView 滚动