我设置了一个视图控制器,其中包含多个容器视图,每个视图都有自己的对应视图控制器。在包含所有视图控制器的代码中,我将嵌入式/子视图控制器作为属性,我将它们嵌入prepareForSegue中,因为它们是嵌入的。

现在,如果我尝试访问子视图控制器之一(例如childViewController.view.frame)的视图以进行移动,那么当我尝试移动它时,只需将其推入视图控制器内一点,而无需实际移动视图控制器本身。

但是,如果在情节提要中我在一个包含视图控制器的容器视图中为每个容器视图创建一个出口,并使用childView.frame,则可以动画效果很好地移动FULL视图控制器。

为什么是这样?他们不是都引用相同的观点吗?

最佳答案

不,他们没有引用相同的视图。 childView只是常规的UIView,它是容器控制器的子视图。 childViewController.view是子视图控制器的视图-该视图是childView的子视图。因此,如果要移动子视图控制器的视图,则需要移动其父视图childView(这两个视图的大小相同,因此,如果不超出其范围,就不能在childView内移动子视图控制器的视图)。

您在IB中所做的等同于代码中的操作(childVC是嵌入式视图控制器,containerView是父视图中的子视图)。此代码将在容器控制器中。

[self addChildViewController: childVC];
[childVC didMoveToParentViewController:self];
childVC.view.frame = self.containerView.bounds;
[self.containerView addSubview:childVC.view];

10-06 02:56