目标c – UIActivityViewController定向模式

我的iPhone应用程序设计仅支持纵向方向,除了一个呈现照片的视图控制器,并且还支持横向模式。

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

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

问题:

在我的一个(仅肖像)视图控制器中,我使用UIActivityViewController让用户选择通过电子邮件或短信共享内容。

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

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

有没有办法迫使eamil视图控制器只处于纵向模式?

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

你应该制作另一个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: ^ { ; }] ; }]; 

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

这对我有用(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

希望你能得到它。 🙂

也许你应该试试

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

在你的观点?

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