iOS:如果与" Message"共享,则会崩溃选项

时间:2016-12-20 01:56:05

标签: ios swift uiactivityviewcontroller mfmessagecomposeview

我们的应用仅支持纵向模式。呈现UIActivityViewController可以正常工作。

然而,分享"消息"选项崩溃了应用程序:

  

***由于未捕获的异常终止应用' UIApplicationInvalidInterfaceOrientation',原因:'支持   方向与应用程序没有共同的方向,并且   [MFMessageComposeViewController shouldAutorotate]返回YES'

与其他选项共享,例如Facebook Messenger,可以使用。

来自类似SO问题like this one的解决方案不起作用,因为它们建议支持所有方向。我们只想支持肖像。

1)我们如何支持"消息"共享选项,同时仅支持纵向方向,即仅在Info.plist中支持纵向方向?

2)为什么我们能够支持"消息"在Info.plist中只有纵向方向的其他应用程序中共享选项但不是这个?我们应该在哪里寻找调试目的?

    // Define share objects
    let objectsToShare = ["test message"] as [Any]

    // Configure UIActivityViewController
    let activityViewController = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
    activityViewController.excludedActivityTypes =
        [UIActivityType.addToReadingList,
         UIActivityType.assignToContact,
         UIActivityType.print,
         UIActivityType.copyToPasteboard]

    // Define completion handler
    activityViewController.completionWithItemsHandler = doneSharingHandler

    // Show UIActivityViewController
    present(activityViewController, animated: true, completion: nil)

4 个答案:

答案 0 :(得分:1)

所有个人视图控制器仅支持肖像,通过实施supportedInterfaceOrientations返回UIInterfaceOrientationPortrait

但您的应用,即 Info.plist 或应用代表的application(_:supportedInterfaceOrientationsFor:),应支持所有方向。

这将允许运行时以它想要的方式呈现这个MFMessageComposeViewController,但你的视图控制器仍然只是纵向,这就是你想要的。

答案 1 :(得分:1)

我尝试了一段时间来重现这个错误并且无法让它崩溃。最后,当我应该返回UIInterfaceOrientationPortrait其中一个方向函数时,我返回UIInterfaceOrientationMaskPortrait时能够得到这个确切的崩溃。检查您的视图控制器的supportedInterfaceOrientations实施以及application:supportedInterfaceOrientationsForWindow:

的实施情况

答案 2 :(得分:1)

这是一个非常强硬的解决方案,适用于仅以纵向呈现的应用程序。

MFMessageComposeViewController上创建一个类别并覆盖supportedInterfaceOrientationsshouldAutorotate以仅支持肖像。

您可能需要在Objective C中创建此类别以实际编译它,但它会起作用。

@interface MFMessageComposeViewController (NoRotation) @end
@implementation MFMessageComposeViewController (NoRotation)

- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL)shouldAutorotate {
    return NO;
}

答案 3 :(得分:0)

应用程序中其他地方的流浪代码(糟糕的开发人员,糟糕的开发人员,糟糕的开发人员!)导致了这个错误。

代码中其他地方的UINavigationController的扩展名覆盖supportedInterfaceOrientations并导致每个人浪费时间在一个愚蠢的错误上。抱歉!但是,希望我们的邋iness有益于未来的一些用户。

删除扩展程序修复了错误。

如果SO决定认可并奖励最糟糕的开发者,我们很乐意代表提名。 :)