从父视图控制器再次推送时,子视图框架发生变化
Child View frame change when pushed again from parent view controller
我在另一个 viewcontroller 中添加了一个 viewcontroller 的视图作为子视图。子视图控制器有一个表视图。单击 didSelectRow
时可以多次推送子视图控制器以在相同的 viewcontroller 中显示更新的数据,这工作正常。但是当我从我的父视图中推送子视图控制器时,子视图将其框架更改为原始 viewcontroller 框架并离开父视图。所以我想确保它始终停留在其父视图的框架中,并且推送和弹出只会发生在父视图内。
添加子视图:
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Home" bundle:nil];
ChildViewController *vc = [sb instantiateViewControllerWithIdentifier:@"ChildViewController"];
[self addChildViewController:vc];
[vc.view setFrame:self.tableFilters.frame];
[self.viewContainer addSubview:vc.view];
[vc didMoveToParentViewController:self];
用 Child viewcontroller 的 didSelctRow 方法编写的代码:
ChildViewController *newMyTableVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildViewController"];
newMyTableVC.delegate = self;
[self.tableView reloadData];
[self.navigationController pushViewController:newMyTableVC animated:YES];
由于您的子视图控制器未嵌入 UINavigationController
self.navigationController
的实例中,因此指向其父级的导航控制器。这就是为什么推送和弹出发生在父视图控制器中的原因。
要在您的子视图控制器中进行推送和弹出工作,您必须将子视图控制器嵌入 UINavigationController
:
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Home" bundle:nil];
ChildViewController *vc = [sb instantiateViewControllerWithIdentifier:@"ChildViewController"];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc];
[self addChildViewController:nc];
[nc.view setFrame:self.tableFilters.frame];
[self.viewContainer addSubview:nc.view];
[nc didMoveToParentViewController:self];
我在另一个 viewcontroller 中添加了一个 viewcontroller 的视图作为子视图。子视图控制器有一个表视图。单击 didSelectRow
时可以多次推送子视图控制器以在相同的 viewcontroller 中显示更新的数据,这工作正常。但是当我从我的父视图中推送子视图控制器时,子视图将其框架更改为原始 viewcontroller 框架并离开父视图。所以我想确保它始终停留在其父视图的框架中,并且推送和弹出只会发生在父视图内。
添加子视图:
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Home" bundle:nil];
ChildViewController *vc = [sb instantiateViewControllerWithIdentifier:@"ChildViewController"];
[self addChildViewController:vc];
[vc.view setFrame:self.tableFilters.frame];
[self.viewContainer addSubview:vc.view];
[vc didMoveToParentViewController:self];
用 Child viewcontroller 的 didSelctRow 方法编写的代码:
ChildViewController *newMyTableVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildViewController"];
newMyTableVC.delegate = self;
[self.tableView reloadData];
[self.navigationController pushViewController:newMyTableVC animated:YES];
由于您的子视图控制器未嵌入 UINavigationController
self.navigationController
的实例中,因此指向其父级的导航控制器。这就是为什么推送和弹出发生在父视图控制器中的原因。
要在您的子视图控制器中进行推送和弹出工作,您必须将子视图控制器嵌入 UINavigationController
:
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Home" bundle:nil];
ChildViewController *vc = [sb instantiateViewControllerWithIdentifier:@"ChildViewController"];
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:vc];
[self addChildViewController:nc];
[nc.view setFrame:self.tableFilters.frame];
[self.viewContainer addSubview:nc.view];
[nc didMoveToParentViewController:self];