使用 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(例如,在所有需要的方法中调用超类,例如视图控制器生命周期例程)。参见:
- SO ViewController methods question
- SO ViewController lifecycle question
- Apple UIViewController reference (latest)
这些是我会关注的领域and/or提供相关代码。
由于您在当前 UIViewController
之上呈现 MFMailComposeViewController
和 MFMessageComposeViewController
,因此当您在发送消息后关闭 MFMailComposeViewController
或 MFMessageComposeViewController
时,您的UIViewController
viewWillAppear
方法将在视图再次出现时被调用,所以我认为检查 viewWillAppear
或 viewWillDisappear
方法是否正在制作视图 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
这可能并不适用于所有人,但根据其他人的回答,我发现视图的显示方式存在各种问题,这些问题可能会导致同样的问题。如果我的修复对你不起作用,我建议注释掉所有不必要的代码,直到问题消失,然后有条不紊地将小部分重新上线,一路测试以确定你的问题。
我使用以下代码分享一些内容
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(例如,在所有需要的方法中调用超类,例如视图控制器生命周期例程)。参见:
- SO ViewController methods question
- SO ViewController lifecycle question
- Apple UIViewController reference (latest)
这些是我会关注的领域and/or提供相关代码。
由于您在当前 UIViewController
之上呈现 MFMailComposeViewController
和 MFMessageComposeViewController
,因此当您在发送消息后关闭 MFMailComposeViewController
或 MFMessageComposeViewController
时,您的UIViewController
viewWillAppear
方法将在视图再次出现时被调用,所以我认为检查 viewWillAppear
或 viewWillDisappear
方法是否正在制作视图 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
这可能并不适用于所有人,但根据其他人的回答,我发现视图的显示方式存在各种问题,这些问题可能会导致同样的问题。如果我的修复对你不起作用,我建议注释掉所有不必要的代码,直到问题消失,然后有条不紊地将小部分重新上线,一路测试以确定你的问题。