我通过使用添加了视图控制器的视图
[self.view addsubview view controller.view];
但如图所示,它已完全冲到顶部。
下面的视图控制器有一个导航栏。
我通过使用添加了视图控制器的视图
[self.view addsubview view controller.view];
但如图所示,它已完全冲到顶部。
下面的视图控制器有一个导航栏。
您还需要通过指定其框架来定位新视图控制器的视图。否则它会做一些你意想不到的事情,比如现在。
根据您的需要,它可能是:
controller.view.frame = self.view.bounds;
这只会将当前 VC 的视图与新 VC 的视图重叠。
或者根据您的需要根据需要进行更改。
就像 BlackRider 所说,最好的方法是将超级视图的边界分配给添加的视图的框架:
[self.view addSubview: viewcontroller.view];
viewcontroller.view.frame = self.view.bounds;
这是为新添加的子视图设置大小和位置以完美重叠父视图的完美方式。
添加另一个 UIViewController 的视图通常不是最好的方法。但是,我发现这种技术可能是实现某些特殊动画过渡的最有效方法,如果不是唯一方法的话。然后移除添加的视图并呈现没有动画的新 UIViewController。
如果不需要特殊的动画或视图层次结构,这可能不是一个好主意。如果您希望新的视图控制器全屏显示,请使用:
[self presentViewController: viewcontroller animated:YES completion:nil];
否则,如果您希望它成为导航控制器的一部分,请将其推送到导航控制器的堆栈中。在您的示例中,假设self是当前的顶级控制器:
[self.navigationController pushViewController:viewcontroller animated:YES];
有关更多信息,请查看展示视图控制器和选择过渡样式: