2009-07-09 13 views
5

Mi aplicación se basa en el paisaje. Me gustaría usar MFMailComposeViewController en el paisaje, pero no puedo encontrar nada para notificarlo sobre la orientación. En landscape, MFMailComposeViewController muestra solo la parte superior de la ventana de redacción de correo, entrando desde el lado izquierdo, cuando está en el modo paisaje. Básicamente cubre la mitad de la pantalla de paisaje. ¿Hay alguna manera de hacer que la ventana de redacción de correo aparezca en horizontal en lugar de vertical?Mostrar MFMailComposeViewController en el paisaje

--- --- EDITAR La vista donde me gustaría cargar el correo nuevo se deriva de esta manera:

//from first UIViewController 
[self presentModalViewController:secondView animated:YES]; 

//from secondView (a UIViewController), I load the info view, which is where the mail compose shows 
InfoController *infoController = [[InfoController alloc] initWithNibName:@"Info" bundle:[NSBundle mainBundle]]; 
[self.view addSubview:infoController.view]; 

partir de lo anterior, la vista padre correo componer es la tercera cargada . En info.plist, hago esto:

UIInterfaceOrientation = UIInterfaceOrientationLandscapeRight 

Respuesta

6

Si presenta MailViewController en un UIViewController anidado, intente mostrarlo en su UIViewController principal. Esto solucionó el problema para mí. Acabo de pasar mi controlador principal al controlador principal.

+1

¡Funcionó para mí! ¡Gracias! Descubrí por qué también: el controlador de vista principal es en nuestros casos el que maneja la rotación, y el único que cambia su UIInterfaceRotation.El compositor de correo se presenta de acuerdo con la rotación del controlador de vista – tadejsv

+0

@Dimitris, ¿podría enviarme la muestra – Ravi

+0

@Ravan? No tengo ni idea de dónde encontrarlo ni creo que el código de 5 años sea útil en el desarrollo de iOS ... Estoy seguro de que las cosas deben haber cambiado significativamente desde entonces. – Dimitris

0

Tengo una aplicación paisaje, y mostrando un MFMailComposeViewController parece funcionar bien ...

Mi aplicación tiene que cambiar a modo de retrato a veces porque el UIImagePickerController no hace trabajo en modo horizontal, así que uso el siguiente código en mi opinión, para volver a configurar el modo de paisaje ...

self.bounds = CGRectMake(0, 0, 480, 320); 
self.center = CGPointMake(160, 240); 
self.transform = CGAffineTransformMakeRotation(M_PI/2); 

la MFMailComposeViewController debe recoger esos valores y saber cómo mostrar i tself.

+0

estoy usando el delegado de MFMailComposeViewController en un UIViewController. Tengo que usar self.view.bounds y demás. Si configuro lo que tienes en viewDidLoad de UIViewController, se cargará el retrato, que no quiero. Si lo hago justo antes de que se muestre la vista de redacción de correo, obtengo los mismos resultados que en el OP. – 4thSpace

+0

¿qué tipo de vista está mostrando antes de la vista de redacción de correo? ¿Le ha dicho al sistema operativo que está en modo horizontal, o está haciendo su propio dibujo y simplemente lo está haciendo hacia los lados? –

+0

Disculpe la demora. He editado el OP en respuesta a sus preguntas. Por favor échale un vistazo. – 4thSpace

7

Podemos agregar el siguiente código en la implementación de la clase Application Delegate para anular la rotación automática por el controlador de vista de compositor de correo.

@interface MFMailComposeViewController (AutoRotation) 
// to stop auto rotation 
@end 

@implementation MFMailComposeViewController (AutoRotation) 
// stop auto rotation 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // should support all interface orientations. 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 
@end 
+0

¡Agradable! Funciona perfecto (lo único que está en iOS 6, yo uso, debería, en su lugar, "Autentificar" y "Métodos soportados de interfaz de interfaz", debería "Autorizar" a "Orientación de interfase :)". ¡Gracias! – Azpiri

-1

éste funciona para mí ...

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // return (YES); 
    return (interfaceOrientation==UIInterfaceOrientationLandscapeRight); 
} 

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation)) 
    { 
     ...... 
    } 
}  
0

intenta enviar "presentModalViewController:" a RootViewController de la ventana de la aplicación (en AppDelegate).

Creo que eso funciona para mí porque MFMailComposeViewController no puede forzar la orientación de rootViewController, pero puede forzar la orientación de viewControllers empujado por el control de navegación de rootViewController.

se necesita algo como esto:

[((AppDelegate *)[UIApplication sharedApplication]).window.rootViewController presentViewController:mailVC animated:YES]; 
Cuestiones relacionadas