Diseño de la aplicación de iPhone girada de múltiples vistas con una barra de herramientas

Tengo una aplicación de vista múltiple con una barra de herramientas. El controlador de vista raíz controla la barra de herramientas, pero las otras vistas tienen su propia clase de controlador de vista. Utilizo un código como este para cargar las vistas:

-(IBAction)loadBand1Start:(id)sender{
    [self clearView];
    Band1Start *band1Controller = [[Band1Start alloc] initWithNibName:@"Band1Start" bundle:nil];
    self.band1Start = band1Controller;
    [band1Controller release];
    [self.view insertSubview:band1Start.view atIndex:0];
    if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) {
        band1Start.view.frame=CGRectMake(0, 0, 480.0, 260.0);
    } else {
        band1Start.view.frame=CGRectMake(0, 0, 320.0, 400.0);
    }
}

La instrucción IF es para que se cargue en la orientación correcta. Sin esto, aunque gira bien, siempre se carga en vertical, incluso si el teléfono está en horizontal.

Funciona el tamaño automático y la rotación automática. Usé IB para construir mis plumillas en retrato. Cuando el teléfono se gira a horizontal, giran y cambian de tamaño, sin embargo, con algunas puntas, el diseño girado no se ve bien. Hay superposiciones, etc., que es un problema común, y sé que se puede solucionar usando CGRectMake.

Sin embargo, no importa dónde coloque el CGRectCode, no se ejecuta. He intentado ponerlo en willRotateToInterfaceOrientation, willAnimateRotationToInterfaceOrientation y viewWillAppear, pero el diseño girado no ha cambiado.

Si utilizo el siguiente código para cambiar de vista, el diseño girado es como lo quiero, pero la barra de herramientas no aparece:

-(IBAction)loadBand1Start:(id)sender{
    [self clearView];
    Band1Start *band1Controller = [[Band1Start alloc] initWithNibName:@"Band1Start" bundle:nil];
    [self presentModalViewController:band1Controller animated:NO];
    [band1Controller release];
}

Creo que esto se debe a que el controlador de vista de la barra de herramientas debe ser el controlador de vista raíz para que aparezca la barra de herramientas, pero solo el controlador de vista raíz recibe las notificaciones de cambio de orientación.

Entonces, si mantengo mi controlador de la barra de herramientas como el controlador de la vista raíz, el controlador de la subvista no recibe las notificaciones de orientación, por lo que no ejecuta mi código CGRectMake, pero si hago que el controlador de la subvista sea el controlador de la vista raíz, recibe las notificaciones correctamente, pero la barra de herramientas no aparece porque su controlador no es el controlador raíz.

¿Estoy en lo cierto sobre el problema aquí? ¿Hay alguna forma de evitarlo?

preguntado el 08 de noviembre de 11 a las 12:11

Implementaste - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation? -

Sí, devuelvo SÍ para eso en todos mis archivos .m. -

La autorrotación y el cambio de tamaño funcionan, es solo el diseño personalizado lo que no funciona. -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.