在横向中显示MFMailComposeViewController

时间:2009-07-09 02:22:04

标签: cocoa-touch iphone-sdk-3.0 uiviewcontroller

我的应用是基于景观的。我想在横向上使用MFMailComposeViewController但是找不到任何关于方向的信息。在横向中,MFMailComposeViewController仅在横向显示邮件撰写窗口的顶部,从左侧进入。基本上它覆盖了一半的景观屏幕。有没有办法让邮件撰写窗口以横向而不是纵向显示?

---编辑--- 我想要加载邮件组成的视图是这样派生的:

//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 个答案:

答案 0 :(得分:7)

我们可以在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

答案 1 :(得分:6)

如果在嵌套的UIViewController上呈现MailViewController,请尝试在主UIViewController上显示它。这解决了我的问题。我刚将主控制器传递给主控制器。

答案 2 :(得分:0)

我有一个横向应用,并且显示MFMailComposeViewController似乎工作得很好......

我的应用程序有时必须切换到纵向模式,因为UIImagePickerController 不能在横向模式下工作,所以我在视图中使用以下代码重新设置横向模式... < / p>

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

MFMailComposeViewController应该获取这些值并知道如何显示自己。

答案 3 :(得分:0)

尝试将“presentModalViewController:”发送到应用程序窗口的rootViewController(在AppDelegate中)。

我认为这对我有用,因为MFMailComposeViewController不能强制rootViewController方向,但可以强制由rootViewController的navigationController推送的viewControllers的方向。

你需要这样的东西:

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

答案 4 :(得分:-1)

这个适合我...

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

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