0

そのため、ViewController 全体を満たすスクロールビュー内に 2 つのスクロールビューを取得しました。

ここに画像の説明を入力

最初の SV は問題なくスクロールしているため、2 つのサブ SV の contentSize が設定されます。

残念ながら、それは Autolayout で何かする必要があると思います...オンになっていて、オフにすると、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

通常、スクロールビューはすべてのタッチイベントを食べます。したがって、スクロールビューのサブビューはタッチ イベントを取得しません。サブビューでタッチ イベントを有効にするには、タッチ イベントをスクロール ビューから次のレスポンダーに渡すことができます。

scrollview サブクラスで touches メソッドをオーバーライドすることで、これを行うことができます。例を含む詳細な説明は、こちらにあります

于 2013-06-07T15:50:50.503 に答える