2009-07-09 7 views
5

Mon application est basée sur le paysage. Je voudrais utiliser MFMailComposeViewController en mode paysage mais je ne trouve rien pour le signaler à propos de l'orientation. En mode paysage, MFMailComposeViewController n'affiche que la partie supérieure de la fenêtre de composition de courrier, venant du côté gauche, en mode paysage. Fondamentalement, il couvre la moitié de l'écran de paysage. Existe-t-il un moyen d'afficher la fenêtre de composition de courrier en mode paysage plutôt qu'en mode portrait?Affichage de MFMailComposeViewController en mode paysage

--- --- EDIT La vue où je voudrais charger la composition de message est dérivé comme ceci:

//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]; 

De ce qui précède, la vue parent mail est Compose le troisième chargé . En info.plist, je fais ceci:

UIInterfaceOrientation = UIInterfaceOrientationLandscapeRight 

Répondre

6

Si vous présentez le MailViewController sur un UIViewController imbriqué, essayez de l'afficher sur votre UIViewController principal. Cela a réglé le problème pour moi. Je viens de passer mon contrôleur principal au contrôleur principal.

+1

A travaillé pour moi! Merci! J'ai compris pourquoi aussi: le contrôleur de vue principal est dans nos cas la seule rotation de manipulation, et le seul qui change est UIInterfaceRotation.Le compositeur de courrier se présente selon la rotation du viewcontroller – tadejsv

+0

@Dimitris, voulez-vous m'envoyer l'échantillon? – Ravi

+0

@Ravan Je ne sais pas où le trouver et je ne pense pas que le code de 5 ans sera utile dans iOS dev ... I Je suis sûr que les choses doivent avoir changé de manière significative depuis. – Dimitris

0

J'ai une application de paysage, et montrant un MFMailComposeViewController semble fonctionner correctement ...

Mon application doit passer en mode portrait parfois parce que le UIImagePickerController ne pas travail en mode paysage, donc j'utiliser le code suivant à mon avis de re-configurer le mode paysage ...

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

le MFMailComposeViewController devrait prendre ces valeurs et de savoir comment afficher i moi-même.

+0

J'utilise le délégué de MFMailComposeViewController dans un UIViewController. Je dois utiliser self.view.bounds et ainsi de suite. Si je définis ce que vous dans viewDidLoad de UIViewController, il chargera portrait, ce que je ne veux pas. Si je le fais juste avant que la vue de composition de courrier ne s'affiche, j'obtiens les mêmes résultats que dans l'OP. – 4thSpace

+0

quel type de vue affichez-vous avant la vue de composition du courrier? avez-vous dit au système d'exploitation que vous étiez en mode paysage, ou faites-vous votre propre dessin et faites-le simplement de côté? –

+0

Désolé pour le retard. J'ai édité le PO en réponse à vos questions. Jetez un coup d'oeil s'il vous plait. – 4thSpace

7

Nous pouvons ajouter le code suivant dans l'implémentation de la classe Application Delegate pour remplacer la rotation automatique par le contrôleur de vue compositeur mail.

@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

Bien! Cela fonctionne parfaitement (seule chose est dans IOS 6 j'utilise les méthodes -shouldAutorotate et -supportedInterfaceOrientations à la place -shouldAutorotateToInterfaceOrientation :). Merci! – Azpiri

-1

celui-ci fonctionne pour moi ...

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

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

Essayez d'envoyer "presentModalViewController:" à RootViewController de votre fenêtre d'application (en AppDelegate).

Je pense que cela fonctionne pour moi parce que MFMailComposeViewController ne peut pas forcer l'orientation rootViewController, mais peut forcer l'orientation de viewControllers qui a été poussé par navigationController de rootViewController.

Vous avez besoin quelque chose comme ceci:

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