Отображение MFMailComposeViewController в альбомной ориентации - PullRequest
5 голосов
/ 09 июля 2009

Мое приложение основано на ландшафте.Я хотел бы использовать MFMailComposeViewController в ландшафте, но не могу найти ничего, чтобы уведомить его об ориентации.В альбомной ориентации MFMailComposeViewController отображает только верхнюю часть окна создания почты, входящего с левой стороны, в альбомной ориентации.В основном это покрывает половину пейзажного экрана.Есть ли способ заставить окно составления почты отображаться в альбомной, а не в вертикальной ориентации?

--- EDIT --- Вид, в который я хотел бы загрузить составление почтового сообщения, выводится следующим образом:*

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

Исходя из вышесказанного, родительское представление создания почты является третьим загруженным.В info.plist я делаю это:

UIInterfaceOrientation = UIInterfaceOrientationLandscapeRight

Ответы [ 5 ]

7 голосов
/ 05 января 2011

Мы можем добавить следующий код в реализацию класса Application Delegate для переопределения автоматического поворота контроллером представления компоновщика почты.

@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
6 голосов
/ 19 ноября 2009

Если вы представляете MailViewController на вложенном UIViewController, попробуйте отобразить его на своем основном UIViewController. Это решило проблему для меня. Я только что передал свой главный контроллер главному контроллеру.

0 голосов
/ 29 августа 2013

Попробуйте отправить «presentModalViewController:" в rootViewController окна вашего приложения (в AppDelegate).

Я думаю, что это работает для меня, потому что MFMailComposeViewController не может форсировать ориентацию rootViewController, но может форсировать ориентацию viewController, которая была выдвинута навигационным контроллером rootViewController.

Вам нужно что-то вроде этого:

    [((AppDelegate *)[UIApplication sharedApplication]).window.rootViewController presentViewController:mailVC animated:YES];
0 голосов
/ 22 марта 2011

это работает для меня ...

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

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
    if (UIInterfaceOrientationIsLandscape(toInterfaceOrientation))
    {
        ......
    }
}    
0 голосов
/ 09 июля 2009

У меня есть альбомное приложение, и показ MFMailComposeViewController, кажется, работает нормально ...

Моему приложению иногда приходится переключаться в портретный режим, потому что UIImagePickerController не не работает в ландшафтном режиме, поэтому я использую следующий код, чтобы восстановить ландшафтный режим ...

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

MFMailComposeViewController должен подобрать эти значения и знать, как отображать себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...