我有一个包含在父滚动视图中的子滚动视图(不是直接子视图)。我想要的是,一旦子滚动视图到达其内容的末尾,父滚动视图就开始沿相同方向滚动。
这种开箱即用的工作,但不是真的。现在我必须抬起手指才能在孩子到达结尾后让父滚动视图开始滚动。
对此有什么想法吗?
编辑:
通过在表格视图单元格中向右滑动以显示聊天控制器,可以在 Snapchat 中看到我正在寻找的示例。
我有一个包含在父滚动视图中的子滚动视图(不是直接子视图)。我想要的是,一旦子滚动视图到达其内容的末尾,父滚动视图就开始沿相同方向滚动。
这种开箱即用的工作,但不是真的。现在我必须抬起手指才能在孩子到达结尾后让父滚动视图开始滚动。
对此有什么想法吗?
编辑:
通过在表格视图单元格中向右滑动以显示聊天控制器,可以在 Snapchat 中看到我正在寻找的示例。
不确定我是否正确理解不是直系子女的含义。但是,一旦您到达子视图滚动的末尾,iOS 应该会自动为您执行此操作,它应该让您滚动父滚动。
为此,您需要为孩子实施:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate: (BOOL)decelerate{
scrollView.bounces = NO;
}
scrollView.bounces = NO
不允许 scrollView 在结束滚动时跳回。所以它只是停留在停止滚动的位置。
然后您需要从scrollViewDidScroll
子级的方法触发父级滚动。
类似于:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
CGFloat scrollViewHeight = scrollView.frame.size.height;
CGFloat scrollContentSizeHeight = scrollView.contentSize.height;
CGFloat scrollOffset = scrollView.contentOffset.y;
CGFloat offset = scrollContentSizeHeight - (scrollOffset + scrollViewHeight);
if (offset <= 0)
[self.parentView setContentOffset:CGPointMake(self.parentView.contentOffset.x, self.parentView.contentOffset.y + diffOffset) animated:YES];
}
diffOffset
您希望 parentScroll 滚动的距离在哪里。
您可能更喜欢更高级的解决方法。
例如,您可以实施
scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
所以你知道什么是velocity
滚动,比较并且应该targetContentOffset
让你知道这个特定的滚动即将结束拖动到达滚动视图内容的末尾。scrollContentSizeHeight
scrollViewHeight
diffOffset
而且您可以animationTime
更准确地计算。
当子视图在父滚动中不完全可见时,阻止滚动可能会很好,因此滚动功能仅在您向上滚动到某个位置时才会出现。