8

親スクロール ビュー (直接の子ではない) 内に子スクロール ビューが含まれています。私が望むのは、子スクロール ビューがコンテンツの最後に到達するとすぐに、親スクロール ビューが同じ方向にスクロールを開始することです。

この種の機能はすぐに使用できますが、実際には機能しません。現在、子が最後に達した後に親のスクロール ビューのスクロールを開始するには、指を離す必要があります。

これについて何か考えはありますか?

編集:

私が探しているものの例は、Snapchat で表ビューのセルを右にスワイプしてチャット コントローラーを表示することで確認できます。

4

1 に答える 1

0

直接の子供ではないということの意味を正しく理解しているかどうかはわかりません。ただし、子ビューのスクロールの最後に到達するとすぐに、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];
}

diffOffsetparentScroll をスクロールする距離はどこにありますか。

より高度な回避策を好む場合があります。

たとえば、実装できます

scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset

そのため、スクロール ビュー コンテンツの最後に到達すると、この特定のスクロールがドラッグを終了しようとしていることをvelocity比較targetContentOffsetしてscrollContentSizeHeight、スクロールの内容がわかります。scrollViewHeight

diffOffsetそして、animationTimeより正確に計算することができます。

親スクロール内で完全に表示されていない場合、子ビューのスクロールをブロックすると便利な場合があります。これにより、特定の位置までスクロールしたときにのみスクロール機能が表示されます。

于 2015-09-12T18:25:32.177 に答える