3

我的 iPhone 应用程序设计为仅支持纵向,除了一个显示照片的视图控制器,还支持横向模式。

所以总的来说我的项目支持所有的方向,但是每个视图控制器(除了照片视图控制器)都实现了这个方法:

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}  

问题:

在我的一个(仅纵向)视图控制器中,我UIActivityViewController用来让用户选择通过电子邮件或 SMS 共享内容。

当用户选择电子邮件选项时,它会自动显示 ios 本机电子邮件视图控制器。

如果用户现在将设备的方向更改为横向,电子邮件视图控制器也会更改为横向,现在如果用户点击取消/发送按钮,电子邮件控制器将被关闭,现在我的所有应用程序都是横向的!

有没有办法强制 eamil 视图控制器仅处于纵向模式?

我知道我可以创建自己的电子邮件视图控制器和子类UIActivity来显示它,但是UIActivityViewController在呈现时不会显示默认的电子邮件图标,我真的很喜欢它来显示它,而不是我的其他(必须是灰色)图标会提供。

4

4 回答 4

2

您应该制作另一个 uinavigationcontroller 并从那里呈现 uiactivityviewcontroller。在这段代码中,_image 是一个你想分享的 UIImage。BlankViewController 只是您可以在 IB 中创建的占位符视图控制器,您还可以将其视图的背景颜色清除并执行您想做的任何外观更改。

__weak  CurrentViewController  *weakSelf    =   self  ;

UIActivityViewController *activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[_image] applicationActivities:nil]   ;
UIViewController        *viewC  =   [[UIViewController alloc] initWithNibName:@"BlankViewController" bundle:nil] ;
UINavigationController  *navC   =   [[UINavigationController alloc] initWithRootViewController:viewC]  ;
activityViewController.completionHandler = ^(NSString *activityType, BOOL completed)
{
    [weakSelf dismissViewControllerAnimated:NO completion: ^ {
        ;    // Your completion handler
    }]  ;
};
[self presentViewController:navC animated:NO completion: ^ {
    [navC presentViewController:activityViewController animated:YES completion: ^ {
        ;
    }]  ;
}];
于 2014-07-29T21:44:10.763 回答
1

我目前正在开发的应用程序中遇到了类似的问题。我最终覆盖了更多的旋转方法,以确保我自己的视图控制器保持纵向。

这对我有用(IOS5+):

- (BOOL) shouldAutorotate {
    return YES;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

- (BOOL)shouldAutorotateToInterfaceOrientation (UIInterfaceOrientation)interfaceOrientation {
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

如果您是 ios5 之前的版本或者这对您不起作用,请查看:http: //developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html

希望你让它工作。:)

于 2013-02-20T11:24:59.910 回答
0

也许你应该试试

- (void)viewWillAppear:(BOOL)animated
{
   [self shouldAutorotateToInterfaceOrientation: UIInterfaceOrientationLandscapeRight];
   [super viewWillAppear:animated];
}

在你看来?

于 2013-02-20T11:20:08.577 回答
0

找不到解决这个问题的方法,所以我最终实现了自己的电子邮件 UIActivity 子类......

于 2013-03-10T13:03:55.697 回答