【问题标题】:How to pass a frame to embedded ViewController?如何将帧传递给嵌入式 ViewController?
【发布时间】:2014-05-28 06:37:24
【问题描述】:

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

【问题讨论】:

  • 请贴出你用来实例化嵌入式vc的代码
  • 情节提要中嵌入式视图控制器的大小是多少?我说的是单独的视图控制器,而不是容器视图。
  • @jrturton 我为它设置了固定的模拟大小,所以在我的故事板中它的大小与我的容器视图相同
  • 您添加的代码有点令人不安。您不应该在 prepareForSegue 中对目标视图控制器的视图做任何事情 - segue 会为您完成所有这些。
  • 我没有看到任何问题。有什么问题?

标签: ios uiviewcontroller frame segue


【解决方案1】:

您提供的代码不应包含在您的“prepareForSegue”方法中。 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

如果这不是正确的解决方案,您可以尝试在'viewDidLayoutSubviews'方法中更改子viewcontroller视图框架

-(void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    self.view.frame = yourframe; 
}

【讨论】:

  • 我做了所有这些准备工作,因为我使用我自己的自定义 segue 从代理控制器(实际嵌入的那个)到我现在需要呈现的 viewController。不幸的是,您建议的更改对我不起作用
  • 尝试从情节提要中移除 segue 并以编程方式添加子视图控制器。您可以通过调用[self.storyboard insrantiateViewControllerWithIdentifier:@"your_id"]; 创建您的子视图控制器,然后设置其视图框架
猜你喜欢
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2018-03-21
  • 1970-01-01
  • 2022-08-18
相关资源
最近更新 更多