4

目的: 特定のポイントまで親のスクロールを達成する。スクロールをフリーズし、子ビューを一番下までスクロールさせます。再び上に移動し、子ビュー コントローラーが一番上に到達するまでスクロールし、次に親ビューが一番上に到達してページが元の状態になるまでスクロールします。

次のように childviewcontroller を追加しています。

- (void)switchCurrentControllerWith:(UIViewController*)viewController andViewHeight:(float)height{

//1. The current controller is going to be removed
[selectedViewController willMoveToParentViewController:nil];
//    ((DRBaseViewController *)viewController).hideNavBar = YES;

//2. The new controller is a new child of the container
[self addChildViewController:viewController];

//3. Setup the new controller's frame depending on the animation you want to obtain
viewController.view.frame = containerRect;

//The transition automatically removes the old view from the superview and attaches the new controller's view as child of the
//container controller's view

[self transitionFromViewController:selectedViewController
                  toViewController:viewController
                          duration:0.1
                           options:UIViewAnimationOptionShowHideTransitionViews|UIViewAnimationOptionTransitionCrossDissolve
                        animations:^{


                        } completion:^(BOOL finished) {
                            //Remove the old view controller
                            [selectedViewController removeFromParentViewController];

                            //Set the new view controller as current
                            selectedViewController = viewController;
                            [selectedViewController didMoveToParentViewController:self];
                            [self.view bringSubviewToFront:navigationBar];

                             [self.scrollView setContentSize:CGSizeMake(320., CGRectGetMaxY(segmentedControl.frame) + height)];
                        }];
}

現在、親ビュー コントローラーには、ビューの高さ (504) に合わせてスケーリングされた UIScrollView があります。親のスクロールビューを無効にし、子ビューコントローラーのスクロールビュー/テーブルビューのスクロールを有効にするために、スクロールビューデリゲートメソッドで次のタスクを実行しています: -(void)scrollViewDidScroll:(UIScrollView*)scrollView {

if (scrollView.contentOffset.y >= self.segmentScrollView.frame.origin.y) {
    scrollView.scrollEnabled = NO;
    for (UIViewController *selectedViewController in containedControllers) {
        for (UIView *view in selectedViewController.view.subviews) {
            if ([view isKindOfClass:[UITableView class]]) {
                UITableView *tableView = (UITableView*)view;
                tableView.scrollEnabled = YES;
            }
            else if ([view isKindOfClass:[UIScrollView class]]){
                UIScrollView *scrollView = (UIScrollView *)view;
                scrollView.scrollEnabled = YES;
            }
        }
    }

}
else{
    for (UIViewController *selectedViewController in containedControllers) {
        for (UIView *view in selectedViewController.view.subviews) {
            if ([view isKindOfClass:[UITableView class]]) {
                UITableView *tableView = (UITableView*)view;
                tableView.scrollEnabled = NO;
            }
            else if ([view isKindOfClass:[UIScrollView class]]){
                UIScrollView *scrollView = (UIScrollView *)view;
                scrollView.scrollEnabled = NO;
            }
        }
    }
}

if ([scrollView isAtBottom]) {

    for (UIView *view in selectedViewController.view.subviews) {
        if ([view isKindOfClass:[UITableView class]]) {
            UITableView *tableView = (UITableView*)view;
            tableView.scrollEnabled = YES;
        }
        else if ([view isKindOfClass:[UIScrollView class]]){
            UIScrollView *scrollView = (UIScrollView *)view;
            scrollView.scrollEnabled = YES;
        }
    }
}
}

今、私の問題は、親のスクロールビューが固定コンテンツオフセットに達したときに、子ビューのスクロール/テーブルビューがスクロールされず、子ビューのスクロールビューをスクロールする必要があることです! ここで何が問題になっているようですか?

PS。childview の Scroll/TableView のフレームとコンテンツのサイズを確認しましたが、問題ありません。

注: 子ビューのテーブル/スクロールビューのスクロールが、ある方向では無効になっており、別の方向では有効になっていることがわかります!

4

0 に答える 0