【问题标题】:Blank screen after share content using UIActivityViewController使用 UIActivityViewController 共享内容后的空白屏幕
【发布时间】:2015-11-10 22:25:42
【问题描述】:

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

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

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

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

如何解决这个问题?

更新

当我为共享目标选择邮件或短信应用程序时,会出现空白屏幕,对于 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)
}

【问题讨论】:

  • 这个演示项目可以帮助你:github.com/genedelisa/ActivityDemo
  • 我检查了你的代码,在我的项目中它工作正常,我认为问题可能出在你呈现视图控制器的viewWillAppear 的某个地方。可以分享更多代码吗?
  • 是的,我认为问题出在您没有显示的代码中。呈现视图控制器中的代码是相关的。
  • 你是在主线程上做这个吗?您能否向我们展示一下您在演示生命周期中的明显时间点有哪些代码?
  • @VitaliyGozhenko 我在 viewWillAppear 中没有任何代码

标签: ios swift uiactivityviewcontroller


【解决方案1】:

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

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

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

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

这些是我将重点关注和/或提供相关代码的领域。

【讨论】:

    【解决方案2】:

    当您在当前 UIViewController 上方显示 MFMailComposeViewControllerMFMessageComposeViewController 时,当您在发送消息后关闭 MFMailComposeViewControllerMFMessageComposeViewController 时,您的 UIViewController viewWillAppear 方法将被称为视图再次出现,因此我认为检查viewWillAppearviewWillDisappear 方法是否正在制作视图nil

    【讨论】:

      【解决方案3】:

      我没有在您的 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)
      }
      

      【讨论】:

      • 感谢您的回答,但问题未解决:(
      • 您在使用导航控制器吗?也许您需要从那里展示它?像导航控制器。 presentViewController(...)?
      【解决方案4】:

      也许您没有在正确的视图中显示活动视图控制器,请尝试以下操作:

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

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

      如果需要如何查看iOS版本:

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

      【讨论】:

        【解决方案5】:

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

        之前的代码:

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

        之后的代码:

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

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

        这可能不适用于所有人,但根据其他人的回答,我认为视图的显示方式存在各种问题,这些问题可能会导致相同的问题。如果我的修复对您不起作用,我建议注释掉所有不必要的代码,直到问题消失,然后有条不紊地重新上线,并在此过程中进行测试以确定您的问题。

        【讨论】:

        • 通过这样做,它不会再显示空白屏幕,但约束对我来说是不正确的。所以它不会像它应该显示的那样显示
        • 是的,根视图不应该设置为:translatesAutoresizingMaskIntoConstraints = false;竖起大拇指。
        猜你喜欢
        • 2021-06-04
        • 1970-01-01
        • 2021-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多