目的: 特定のポイントまで親のスクロールを達成する。スクロールをフリーズし、子ビューを一番下までスクロールさせます。再び上に移動し、子ビュー コントローラーが一番上に到達するまでスクロールし、次に親ビューが一番上に到達してページが元の状態になるまでスクロールします。
次のように 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 のフレームとコンテンツのサイズを確認しましたが、問題ありません。
注: 子ビューのテーブル/スクロールビューのスクロールが、ある方向では無効になっており、別の方向では有効になっていることがわかります!