Objective c 子控制器中的视图控制器帧大小

Objective c 子控制器中的视图控制器帧大小,objective-c,ios,uiviewcontroller,Objective C,Ios,Uiviewcontroller,我正在实现UIViewcontroller控制。在下面的示例中,我在rootcontroller中设置了ChildController的帧大小。子视图显示为我设置的大小,但是当我在container1中检查其边界时,它会报告与我设置的大小不同的大小 根控制器(容器) 集装箱1 -(void)viewDidLoad { [super viewDidLoad]; UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainS

我正在实现UIViewcontroller控制。在下面的示例中,我在rootcontroller中设置了ChildController的帧大小。子视图显示为我设置的大小,但是当我在container1中检查其边界时,它会报告与我设置的大小不同的大小

根控制器(容器)

集装箱1

-(void)viewDidLoad {
    [super viewDidLoad];




UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
//[self.view addSubview:view];
self.view = view;
self.view.backgroundColor = [UIColor redColor];
[view release];
 NSLog(@"view dims %f %f",self.view.bounds.size.width,self.view.bounds.size.height);
}
来自容器1的控制台输出 视图dims 768.000000 1004.000000


我认为问题与将视图框设置为UIScreen main screen]applicationFrame有关。因此我删除了所有这些代码,以便自动创建uiview。问题仍然存在。

视图框架在viewDidLoad中实际上不可用;您应该将所有几何图形操作代码移动到ViewWillDisplay中。在这段时间内,当tom出现在屏幕上时,系统将关闭您在viewDidLoad中设置的任何更改。

顺便说一句,我很有信心在viewDidLoad中设置self.view是一个错误。也许您正在考虑loadView@ctrahey是对的,您绝对不能在
-viewDidLoad
中设置视图。如果以编程方式创建视图而不是使用故事板或nib,则必须创建并设置它
-loadView
。此外,视图控制器实际上不应该更改其视图的框架。父控制器或窗口总是可以做到这一点。感谢您的指导,因此在我的情况下,如果一个父控制器中嵌套了两个视图控制器,我将如何从父控制器设置它们的大小?我可以在每个控制器内设置它们,但正如您所建议的,我同意这不是最优雅的方式。对不起,有101个问题,但我已经习惯了每个屏幕一个视图控制器,这个包含工作流对我来说是全新的。实际上,你应该将几何体更改移动到iOS 5之前的
-viewdide
和iOS 5+之前的
-viewWillLayoutSubviews
<代码>-视图将出现:如果视图正在设置动画,可能实际上没有正确的边界/方向。谢谢@ctrahey,我一直在尝试确定这一点。
-(void)viewDidLoad {
    [super viewDidLoad];




UIView *view = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];
//[self.view addSubview:view];
self.view = view;
self.view.backgroundColor = [UIColor redColor];
[view release];
 NSLog(@"view dims %f %f",self.view.bounds.size.width,self.view.bounds.size.height);
}