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

Posted

技术标签:

【中文标题】目标 c - 滚动视图内的多个滚动视图【英文标题】:Objective c - Multiple scrollviews inside a scrollview 【发布时间】:2013-06-07 14:19:06 【问题描述】:

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

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

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

知道怎么解决吗?

【问题讨论】:

你的意思是说内部滚动视图不滚动?您是否将 touches 事件传递给下一个响应者? 没错!如何将其传递给下一个响应者?? 【参考方案1】:

尝试在自定义 ScrollView 子类中覆盖 hitTest:withEvent:。下面的代码应该让内部 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

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

【讨论】:

关于实施的附加说明。根据文档,您应该在子视图上检查pointInside:withEvent:,然后再向它询问hitTest:withEvent:。但是这是错误的。系统始终只在视图上调用hitTest:withEvent:,并由视图检查其中是否有触摸点。 ty,我下班后试试看。。我也在考虑外包内部滚动视图。。我会考虑的。。我会尽快回答! 我现在尝试了该代码..它没有解决:/我首先将其设置为子 SV,然后将其设置为外部 SV.. 什么都没有:S 将外包子 SV。但如果你得到另一个,就告诉【参考方案2】:

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

您可以通过覆盖滚动视图子类中的触摸方法来做到这一点。详细的例子说明见here。

【讨论】:

我一到家就会检查! 对不起,但我真的不明白这个例子......它使用了一个建议我不明白的服装 VC..

以上是关于目标 c - 滚动视图内的多个滚动视图的主要内容,如果未能解决你的问题,请参考以下文章

Objective c - 表格视图内的按钮防止表格滚动

如何在表格视图 IOS 内的滚动视图中创建文本字段

对 SwiftUI 中水平滚动视图内的列表不起作用的操作

滚动视图内的“绝对位置”视图

嵌套滚动视图内的 Recyclerview 滚动,但不像普通 Recyclerview 或嵌套滚动视图那样快速滚动

目标 C:滚动视图上的 UILongPressGesture