0

所以,我在一个填充整个 ViewController 的滚动视图中得到了 2 个滚动视图。

在此处输入图像描述

所以第一个 SV 滚动没有问题,设置了 2 个子 SV 的 contentSize。

不幸的是,我认为它必须与自动布局有关...它打开,如果我将其关闭,1. SV 不会滚动,但子 SV。

知道如何解决吗?

4

2 回答 2

2

尝试hitTest:withEvent:在自定义ScrollView子类中覆盖。下面的代码应该使内部 UIScollView 处理它的所有触摸。

@interface MyCustomScrollView : UIScrollView
@end

@implementation MyCustomScrollView
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView* handler = nil;
    if ([self pointInside:point withEvent:event]) {
        for (UIView* view in self.subviews) {
            if ([view isKindOfClass:[UIScrollView class]]) {
                CGPoint subPoint = [self convertPoint:point toView:view];
                handler = [view hitTest:subPoint withEvent:event];
                if (handler) {
                    break;
                }
            }
        }

        if (nil == handler) {
            handler = [super hitTest:point withEvent:event];
        }
    }
    return handler;
}
@end

注意:可滚动区域内的可滚动子区域会导致糟糕的用户体验。考虑调整内部滚动视图的大小以适应其内容。

于 2013-06-09T17:41:12.980 回答
0

通常滚动视图会吃掉所有的触摸事件。因此,滚动视图的子视图不会获得触摸事件。要在子视图中启用触摸事件,您可以将触摸事件从滚动视图传递给下一个响应者。

您可以通过覆盖滚动视图子类中的触摸方法来做到这一点。可以在此处找到带有示例的详细说明。

于 2013-06-07T15:50:50.503 回答