目标c - 滚动视图内的多个滚动视图

时间:2013-06-07 14:19:07

标签: ios objective-c xcode uiscrollview autolayout

所以,我在滚动视图中有2个Scrollviews,它填满了整个ViewController。

enter image description here

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

不幸的是,我认为它必须是Autolayout的东西......如果我将其关闭,1.SV不会滚动但是子SV。

任何想法如何解决?

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

一般来说,scrollview会播放所有触摸事件。因此,scrollview的子视图不会获得触摸事件。要在子视图中启用触摸事件,您可以从滚动视图将触摸事件传递给下一个响应者。

你可以通过在scrollview子类中使用touch touches方法来实现。可以找到带有示例的详细说明here