Iphone 目标c-UIActivityViewController定向模式

Iphone 目标c-UIActivityViewController定向模式,iphone,ios,objective-c,uiinterfaceorientation,uiactivityviewcontroller,Iphone,Ios,Objective C,Uiinterfaceorientation,Uiactivityviewcontroller,我的iPhone应用程序设计为只支持纵向,除了一个显示照片的视图控制器,还支持横向模式 因此,总体而言,我的项目支持所有方向,但每个视图控制器(照片视图控制器除外)都实现了该方法: - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrai

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

因此,总体而言,我的项目支持所有方向,但每个视图控制器(照片视图控制器除外)都实现了该方法:

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

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

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

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

是否有办法强制eamil view控制器仅处于纵向模式

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

也许你应该试试看

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

您认为呢?

我目前开发的应用程序也有类似的问题。我最终覆盖了更多的旋转方法,以确保我自己的viewcontroller保持纵向

这就是我的工作原理(IOS5+):

如果您是ios5之前的员工,或者您的工作不正常,请查看:


希望你能成功。:)

无法找到此问题的解决方案,因此我最终实现了自己的电子邮件UIActivity子类…

您应该制作另一个uinavigationcontroller并从中呈现uiactivityviewcontroller。 在这段代码中(u image)是一个UIImage yo wan共享。 BlankViewController只是一个占位符viewcontroller,您可以在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: ^ {
        ;
    }]  ;
}];

所以你不想让你的应用程序在横向模式下运行?我不能将项目设置仅更改为纵向,因为我有一个同样支持横向的PhotoViewController。但除此之外,是的,我不希望任何其他视图控制器支持横向。因此,仅在该特定视图中,在willAutorotateOrientation中启用纵向模式。。。。这样邮件控制器就不会旋转…这部分解决了我的问题。我无法在viewC上显示清晰的颜色,因此我最终将CurrentViewController的视图添加到viewC以伪造它
__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: ^ {
        ;
    }]  ;
}];