所以,我在一个填充整个 ViewController 的滚动视图中得到了 2 个滚动视图。
所以第一个 SV 滚动没有问题,设置了 2 个子 SV 的 contentSize。
不幸的是,我认为它必须与自动布局有关...它打开,如果我将其关闭,1. SV 不会滚动,但子 SV。
知道如何解决吗?
所以,我在一个填充整个 ViewController 的滚动视图中得到了 2 个滚动视图。
所以第一个 SV 滚动没有问题,设置了 2 个子 SV 的 contentSize。
不幸的是,我认为它必须与自动布局有关...它打开,如果我将其关闭,1. SV 不会滚动,但子 SV。
知道如何解决吗?
尝试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
注意:可滚动区域内的可滚动子区域会导致糟糕的用户体验。考虑调整内部滚动视图的大小以适应其内容。
通常滚动视图会吃掉所有的触摸事件。因此,滚动视图的子视图不会获得触摸事件。要在子视图中启用触摸事件,您可以将触摸事件从滚动视图传递给下一个响应者。
您可以通过覆盖滚动视图子类中的触摸方法来做到这一点。可以在此处找到带有示例的详细说明。