直接の子供ではないということの意味を正しく理解しているかどうかはわかりません。ただし、子ビューのスクロールの最後に到達するとすぐに、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
より正確に計算することができます。
親スクロール内で完全に表示されていない場合、子ビューのスクロールをブロックすると便利な場合があります。これにより、特定の位置までスクロールしたときにのみスクロール機能が表示されます。