presentViewController是否更改view.frame?

时间:2012-12-19 06:02:09

标签: objective-c

我有一个关于屏幕转换的问题。

要传输屏幕,我经常使用presentViewController方法。

NextViewController *nextViewController = [[NextViewController alloc] init];
nextViewController.view.frame = CGRectMake(10, 10, 200, 400);    
[self presentViewController:nextViewController animated:YES completion:nil];

但是,我实现的view.frame设置未应用。

以下代码正确运行。

NextViewController *nextViewController = [[NextViewController alloc] init];
[self presentViewController:nextViewController animated:YES completion:nil];
nextViewController.view.frame = CGRectMake(10, 10, 200, 400);

这些代码的区别是什么? 是否在presentViewController方法中重新定义了view.frame?

感谢。

3 个答案:

答案 0 :(得分:5)

NextViewController *nextViewController = [[NextViewController alloc] init];
nextViewController.view.frame = CGRectMake(10, 10, 200, 400);    
[self presentViewController:nextViewController animated:YES completion:nil];

上面的代码无效,因为您正在设置尚未创建的nextViewController视图。

所以在下一个代码中,首先加载视图控制器,然后更改加载视图的框架。

========================= EDIT ===================== ==

如果要直接在视图控制器中设置框架,请将视图与IBOutlet绑定,然后在

中绑定
- (void) viewDidAppear:(BOOL)animated
 {
      //set the frame here
      self.myView.frame = CGRectMake(10, 10, 200, 400);
 }

希望有所帮助:)

答案 1 :(得分:1)

在呈现视图控制器之前不会创建self.view。

ie)nextViewController.view.frame在[self presentViewController:nextViewController animated:YES completion:nil];

之前无效

答案 2 :(得分:0)

显示nextViewController,然后只有您可以更新其各种属性。在视图加载到视图之前执行此操作将无法进行。展示视图,然后更新它。