在子控制器中查看控制器的帧大小

问题描述:

我正在实施UIViewcontroller遏制。在下面的例子中,我在根控制器中设置了childcontrollers的框架大小。子视图显示为我设置的大小,但是,当我检查container1内的边界时,它会根据我设置的大小报告不同的大小。在子控制器中查看控制器的帧大小

Rootcontroller(容器)

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 


self.containA = [[Container1 alloc]init]; 
self.containB = [[Container2 alloc]init]; 

self.containA.view.frame = CGRectMake(50, 50,50, 50); 
self.containB.view.frame = CGRectMake(50, 50, 300, 300); 

    [self addChildViewController:self.containA]; 
    [self addChildViewController:self.containB]; 

    [self.view addSubview:self.containA.view]; 

Container1

-(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 视图

控制台输出变暗768.000000 1004.000000

我认为问题涉及到视图帧设置为UIScreen主屏幕] applicationFrame。因此我删除了所有这些代码,以便自动创建uiview。问题仍然存在。

+0

我很自信,顺便说一句,在viewDidLoad中设置self.view是一个错误。也许你正在考虑loadView? http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW1 – 2012-07-08 16:29:21

+0

@ctrahey是对的,你肯定不得在'-viewDidLoad'中设置你的视图。如果以编程方式创建视图而不是使用故事板或笔尖,则必须创建它并将其设置为“-loadView”。另外,视图控制器应该永远不会改变其视图的框架。父控制器或窗口总是会这样做。 – 2012-07-08 16:40:12

+0

感谢您的指导,所以在我的情况下,我有两个视图控制器嵌套在父项中,我将如何从父项设置它们的大小?我可以在每个控制器本身中设置它,但正如您所建议的,我会同意这不是做最优雅的做事方式。对于101个问题抱歉,但我习惯于每个屏幕一个视图控制器,这个遏制工作流程对我来说都是新的。 – coasty 2012-07-08 22:22:14

视图帧在viewDidLoad中实际上并不可用;你应该将所有的几何操作代码移动到viewWillAppear中。系统将会在那里和当它关于汤姆来到屏幕上时,在viewDidLoad中设置的任何更改中断。

+23

实际上,您应该将几何更改移动到iOS 5之前的“-viewDidAppear”之前,并移至“iOS 5+的”-viewWillLayoutSubviews“。 '-viewWillAppear:'如果视图正在动画,实际上可能没有正确的边界/方向。 – 2012-07-08 16:38:30

+0

谢谢,@JasonCoco;好建议:-) – 2012-07-08 16:57:06

+0

谢谢@ctrahey我一直在试图确定这一点。 – 2013-03-12 05:59:12