2012-07-08 15 views
6

Estoy implementando la contención del controlador UIView. En el siguiente ejemplo, establezco el tamaño de marco de los controladores secundarios en el controlador raíz. La vista secundaria aparece como el tamaño que he configurado, sin embargo, cuando verifico sus límites dentro del contenedor1, informa un tamaño diferente al tamaño que configuré.ver el tamaño del marco del controlador en el controlador infantil

Rootcontroller (contenedor)

- (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); 
} 

salida de la consola de recipiente 1 vista atenúa 768.000000 1004.000000

pensé que el problema estaba relacionado con la configuración del marco de vista a UIScreen pantalla principal] applicationFrame. Así que eliminé todo este código para que la uiview se creara automáticamente. El problema persiste ...

+0

Estoy bastante seguro, por cierto, que el ajuste self.view dentro de viewDidLoad es un error. Quizás estás pensando en loadView? http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW1 –

+0

@ctrahey tiene razón, definitivamente no debe establecer su vista dentro de '-viewDidLoad'. Si está creando su vista mediante programación en lugar de utilizar un guión gráfico o una punta, debe crearlo y configurarlo '-loadView'. Además, un controlador de vista en realidad nunca debería cambiar el marco de su vista. El controlador principal o la ventana siempre llegan a hacer eso. –

+0

gracias por la guía, entonces en mi caso donde tengo dos controladores de vista anidados en un padre, ¿cómo establecería su tamaño desde el padre? Podría establecerlo dentro de cada controlador en sí, pero como ha sugerido y estoy de acuerdo, esto no es posible. Es la forma más elegante de hacer las cosas. Lo siento por las 101 preguntas pero estoy acostumbrado al controlador de una vista por pantalla, este flujo de trabajo de contención es nuevo para mí. – coasty

Respuesta

5

Los marcos de visualización no se pueden usar en viewDidLoad; deberías mover todo tu código de manipulación de geometría a viewWillAppear. El sistema bloqueará cualquier cambio que establezca en viewDidLoad entre allí y cuando se trate de que venga a la pantalla.

+23

En realidad, debe mover los cambios de geometría a '-viewDidAppear' antes de iOS 5 y a' -viewWillLayoutSubviews' para iOS 5+. '-viewWillAppear:' puede que no tenga los límites/orientación correctos si la vista se está animando. –

+0

Gracias, @JasonCoco; un buen consejo :-) –

+0

Gracias @ctrahey He estado tratando de determinar exactamente eso. –

Cuestiones relacionadas