我有一个关于屏幕转换的问题。
要传输屏幕,我经常使用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?
感谢。
答案 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
,然后只有您可以更新其各种属性。在视图加载到视图之前执行此操作将无法进行。展示视图,然后更新它。