如何将框架传递给嵌入式ViewController?

时间:2014-05-28 06:37:24

标签: ios uiviewcontroller frame segue

当我在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];

1 个答案:

答案 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; 
}