当我在StoryBoard中创建容器视图时,我为它设置了约束。然后我将嵌入segue嵌入到我的嵌入式UIViewController
中。
如果我的嵌入式ViewController是UITableViewController
,它会自动排列它的视图。但当它是UIViewController
时,它会为自己设置一个标准尺寸的框架(0,0,320,568)。
我尝试在根VC viewDidLoad
中传递容器视图的值。但后来意识到我的嵌入式VC在调用根VC viewDidLoad
之前实例化了自己。
这是我的代理控制器中实际嵌入的代码 - 然后根据情况切换到多个视图控制器之一。这是在prepareForSegue方法中执行的代码:
[self addChildViewController:segue.destinationViewController];
UIView* destView = ((UIViewController *)segue.destinationViewController).view;
destView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
destView.frame = self.view.bounds;
[self.view addSubview:destView];
[segue.destinationViewController didMoveToParentViewController:self];
答案 0 :(得分:0)
您提供的代码不应该在您的准备版本中。方法。 prepareForSegue将为您调整viewcontroller视图框架的所有内容!如果要以编程方式添加子视图控件,可以尝试以下操作(只是更改了分配视图框的行的顺序):
[self addChildViewController:segue.destinationViewController];
UIView* destView = ((UIViewController *)segue.destinationViewController).view;
destView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:destView];
[segue.destinationViewController didMoveToParentViewController:self];
destView.frame = self.view.bounds; // <------ try to assign the view frame at last
如果这不是正确的解决方案,您可以尝试在&#39; viewDidLayoutSubviews&#39;中更改子视图控制器视图框。方法
-(void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
self.view.frame = yourframe;
}