我们的应用仅支持纵向模式。呈现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)
答案 0 :(得分:1)
所有个人视图控制器仅支持肖像,通过实施supportedInterfaceOrientations
返回UIInterfaceOrientationPortrait
。
但您的应用,即 Info.plist 或应用代表的application(_:supportedInterfaceOrientationsFor:)
,应支持所有方向。
这将允许运行时以它想要的方式呈现这个MFMessageComposeViewController,但你的视图控制器仍然只是纵向,这就是你想要的。
答案 1 :(得分:1)
我尝试了一段时间来重现这个错误并且无法让它崩溃。最后,当我应该返回UIInterfaceOrientationPortrait
其中一个方向函数时,我返回UIInterfaceOrientationMaskPortrait
时能够得到这个确切的崩溃。检查您的视图控制器的supportedInterfaceOrientations
实施以及application:supportedInterfaceOrientationsForWindow:
答案 2 :(得分:1)
这是一个非常强硬的解决方案,适用于仅以纵向呈现的应用程序。
在MFMessageComposeViewController
上创建一个类别并覆盖supportedInterfaceOrientations
和shouldAutorotate
以仅支持肖像。
您可能需要在Objective C中创建此类别以实际编译它,但它会起作用。
@interface MFMessageComposeViewController (NoRotation) @end
@implementation MFMessageComposeViewController (NoRotation)
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
- (BOOL)shouldAutorotate {
return NO;
}
答案 3 :(得分:0)
应用程序中其他地方的流浪代码(糟糕的开发人员,糟糕的开发人员,糟糕的开发人员!)导致了这个错误。
代码中其他地方的UINavigationController的扩展名覆盖supportedInterfaceOrientations
并导致每个人浪费时间在一个愚蠢的错误上。抱歉!但是,希望我们的邋iness有益于未来的一些用户。
删除扩展程序修复了错误。
如果SO决定认可并奖励最糟糕的开发者,我们很乐意代表提名。 :)