目标C - UIActivityViewController方向模式(Objective c -

2019-07-20 05:22发布

我的iPhone应用程序是设计只支持纵向,除了一个视图控制器,它目前的照片,并且支持横向模式为好。

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

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

问题:

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

当用户挑选电子邮件选项,它会自动显示在iOS原生电子邮件视图控制器。

如果现在用户设备的方向改为横向,电子邮件视图控制器也改变景观,现在如果用户点击取消/发送按钮,电子邮件控制器被搁置了,现在我所有的应用程序是在的风景线!

有没有办法迫使EAMIL视图控制器是仅在纵向模式?

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

Answer 1:

你应该让其他的UINavigationController和现在uiactivityviewcontroller从那里。 在此代码_image是一个UIImage哟婉分享。 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: ^ {
        ;
    }]  ;
}];


Answer 2:

我曾在应用我目前正在开发类似的问题。 我结束了覆盖更多的旋转方法,以确保自己的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

希望你得到它的工作。 :)



Answer 3:

可以是U应尽量

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

你的看法呢?



Answer 4:

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



文章来源: Objective c - UIActivityViewController orientation mode