我有一个父滚动视图(不是直接子视图)中包含的子滚动视图。我想要的是,只要子滚动视图到达其内容的结尾,父滚动视图就会开始沿相同的方向滚动。当子滚动视图到达结束时滚动父滚动视图
这类作品开箱即用的,但不是真的。现在我必须抬起手指,让父滚动视图在孩子到达终点后开始滚动。
对此有何看法?
编辑:
的什么我正在寻找可以在Snapchat通过向右滑动在表视图细胞揭示聊天控制器可以看到一个例子。
我有一个父滚动视图(不是直接子视图)中包含的子滚动视图。我想要的是,只要子滚动视图到达其内容的结尾,父滚动视图就会开始沿相同的方向滚动。当子滚动视图到达结束时滚动父滚动视图
这类作品开箱即用的,但不是真的。现在我必须抬起手指,让父滚动视图在孩子到达终点后开始滚动。
对此有何看法?
编辑:
的什么我正在寻找可以在Snapchat通过向右滑动在表视图细胞揭示聊天控制器可以看到一个例子。
不知道如果我理解正确的有哪些呢不是直接孩子意思。但是,只要你到达子视图滚动的末尾,iOS应该自动为你做,它应该让你滚动父滚动。
为此,您需要实现为孩子:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate: (BOOL)decelerate{
scrollView.bounces = NO;
}
scrollView.bounces = NO
不让滚动视图跳回上结束滚动。所以它只是停留在停止滚动的位置。
然后你需要触发从父为子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
更准确。
这可能是很好的阻止滚动的子视图时,它不是父滚动中完全可见,这样的滚动能力似乎只有当你向上滚动直到一定的位置。
感谢您的回复,我一定会尝试您的解决方案。 –
只是在一个案例中,我创建了一个简单的测试项目,在UIScrollView中垂直放置两个'UITableView',它确实有效。如果需要,我可以把它放在某个地方。 – teamnorge
以下是此任务的一个很好的示例回购:https://github.com/goktugyil/EZSwipeController – Esqarrouth