我的应用是基于景观的。我想在横向上使用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
答案 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))
{
......
}
}