嵌套的UIScrollViews和事件路由

Seb*_*ian 13 nested uiscrollview hittest touchesbegan ios

我有2个滚动视图,两个都应该垂直滚动.外部滚动视图(红色)包含搜索栏和内部滚动视图(蓝色).内部滚动视图应该无限滚动(它包含图像/项目,并具有无限滚动实现).

我希望这个控制器工作的方式如下:

向下滚动时,外部滚动视图应首先滚动,搜索栏应消失(滚出内容区域).只有在那之后,内部滚动视图才应该开始滚动.向上滚动时,内部滚动视图应一直滚动到顶部.只有这样外部滚动视图才能进行滚动事件,最后向上滚动以使搜索栏再次可见.

如果我只是在没有任何修改的情况下将它们嵌套在IB中,那么内部滚动视图会捕获所有滚动事件,而它会以相反的方式工作.

请记住,我在这里使用内部滚动视图作为简化的比喻.在我的应用程序中,我实际上有一个控件,它有一个带嵌套表视图的滚动视图(滚动视图让我水平页面,表视图让我垂直滚动).

在此输入图像描述

cat*_*lan 0

仅使用一个scrollView并设置搜索栏的contentInset/contentOffset。沿着这条线的东西:

  UIEdgeInsets oldEdgeInset = [[self scrollView] contentInset];
  CGRect f = [[self searchBar] frame];
  UIEdgeInsets newEdgeInset = UIEdgeInsetsMake(CGRectGetMaxY(f), 0, 0, 0);
  CGPoint offset = [[self scrollView] contentOffset];
  offset.y += oldEdgeInset.top - newEdgeInset.top;
  [[self scrollView] setContentOffset:offset];
  [[self scrollView] setContentInset:newEdgeInset];
  [[self searchBar] setFrame:f];
Run Code Online (Sandbox Code Playgroud)