使用 UIActivityViewController 共享内容后出现黑屏

Blank screen after share content using UIActivityViewController

我使用以下代码分享一些内容

var textToShare = "Test"
let activityVC = UIActivityViewController(activityItems: [textToShare], applicationActivities: nil)
activityVC.excludedActivityTypes = [UIActivityTypePrint, UIActivityTypeCopyToPasteboard, UIActivityTypeAssignToContact]

presentViewController(activityVC, animated: true, completion: nil)

但是当我按下取消按钮或内容分享成功时,应用程序显示黑屏。

如何解决这个问题?

更新:

当我 select 用于共享目标的邮件或短信应用程序时出现空白屏幕,对于 Telegram、Twitter 和 Facebook,它工作完美。

我评论了生命周期方法中的所有代码,仍然是同样的问题。

override func viewDidAppear(animated: Bool)
{
    //setControlsAreHidden(true)
}

override func viewWillAppear(animated: Bool)
{
    //if dataAddedToView
    //{
    //     activityIndicator?.removeFromSuperview()
    //}

}

override func viewWillDisappear(animated: Bool)
{
    //setControlsAreHidden(false)
}

您需要首先检查您的视图控制器在呈现内容时是否未被销毁。呈现视图控制器的生命周期管理例程(例如,ViewWillDisappear)中的一些调试语句可能会有所帮助。

如果问题源于 ViewController 消失,您需要适当地重新创建它。

还要查看您提供内容的任何地方:是否在正确的时间触发绘制?

此外,请确保您根据需要使用 API(例如,在所有需要的方法中调用超类,例如视图控制器生命周期例程)。参见:

这些是我会关注的领域and/or提供相关代码。

由于您在当前 UIViewController 之上呈现 MFMailComposeViewControllerMFMessageComposeViewController,因此当您在发送消息后关闭 MFMailComposeViewControllerMFMessageComposeViewController 时,您的UIViewController viewWillAppear 方法将在视图再次出现时被调用,所以我认为检查 viewWillAppearviewWillDisappear 方法是否正在制作视图 nil .

我在您的 viewDidAppear、viewWillAppear 或 viewWillDisappear 方法中没有看到对超级实现的任何调用。

如果你这样做会怎样?:

override func viewDidAppear(animated: Bool)
{
    super.viewDidAppear(animated)
    //setControlsAreHidden(true)
}

override func viewWillAppear(animated: Bool)
{
    super.viewWillAppear(animated)
    //if dataAddedToView
    //{
    //     activityIndicator?.removeFromSuperview()
    //}

}

override func viewWillDisappear(animated: Bool)
{
    super.viewWillDisappear(animated)
    //setControlsAreHidden(false)
}

也许您没有在正确的视图中显示 activity 视图控制器,请尝试这样的操作:

if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")){
   activityViewController.popoverPresentationController.sourceView = self.view;
}

这是一个 objective C 代码,但只是作为如何设置视图的示例。

如需如何查看iOS版本:

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

我遇到了同样的问题,并且能够通过调整我的主要 UIView 的大小限制来解决它。

之前的代码:

override func loadView() {
    self.view                                           = UIView()
    self.view.translatesAutoresizingMaskIntoConstraints = false
}

之后的代码:

override func loadView() {
    self.view                                           = UIView()
}

所以只需删除 self.view.translatesAutoresizingMaskIntoConstraints = false

这可能并不适用于所有人,但根据其他人的回答,我发现视图的显示方式存在各种问题,这些问题可能会导致同样的问题。如果我的修复对你不起作用,我建议注释掉所有不必要的代码,直到问题消失,然后有条不紊地将小部分重新上线,一路测试以确定你的问题。