【问题标题】:UIActivityViewController showing blank options and can't be interactedUIActivityViewController 显示空白选项并且无法交互
【发布时间】:2019-04-18 07:48:26
【问题描述】:

我在我的应用上实现了带有分享按钮的新功能。请注意,activityViewController 显示为空白。一开始我以为我分享的项目可能是空的,但是当我尝试分享一个简单的字符串时,它仍然显示为这样,我重新访问了我的旧工作代码,它们都是这样的。甚至像这样简单的事情:

let activityViewController = UIActivityViewController(activityItems: ["test"], applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
DispatchQueue.main.async {
    self.present(activityViewController, animated: true, completion: nil)
}

这就是我得到的: 有谁知道是什么原因造成的以及如何解决这个问题?

编辑:使用实际设备测试,导致问题,在我发布的应用程序中,反馈是它没有显示空白,它显示有选项,只是不能交互,不能点击也不能关闭它,应用程序只会“挂起”,然后用户将不得不终止应用程序才能重用它。经过测试,我仍然不确定是什么导致了空白,我已经禁用了我所有的 UIViewController 扩展,(其中许多不是自动化的,并且需要调用函数,所以我认为它们不是问题),并且当我在当前函数的完成块中放置一个 debugPrint 时,它甚至没有被调用,所以活动视图控制器没有完成初始化?

【问题讨论】:

  • 这可能不会在真实设备上发生。您的模拟器没有可显示的应用程序。
  • 我正在我的实际设备上对其进行测试,它显示如下,然后它会在 2 分钟左右后自行崩溃:来自调试器的消息:由于内存问题而终止跨度>
  • 找到了罪魁祸首。请检查我的答案。

标签: ios swift xcode uiactivityviewcontroller


【解决方案1】:

好的,终于找到了罪魁祸首,有人告诉我,我应该研究 UIViewController 的扩展来检查我是否覆盖了某些东西,我没有,但我确实覆盖了 UILabel 和 UIButton 的 awakeFromNib 和 setNeedsDisplay,因为我的应用程序有多语言支持和应用内更改语言支持,我想“自动化” UILabel 和 UIButton 来更改语言字体(因为某些字体更好看),这样我就可以避免将侦听器附加到视图控制器以在他们执行时更改语言字体-应用语言更改。

override open func awakeFromNib() {
    super.awakeFromNib()
    if let prefLang = UserDefaults.languageCode{
        self.font = switchFontForLang(lang: prefLang)
    }
}

override open func setNeedsDisplay() {
    super.setNeedsDisplay()
    if let prefLang = UserDefaults.languageCode{
        self.font = switchFontForLang(lang: prefLang)
    }
}

特别是 setNeedsDisplay() 引起了问题,我在它们两个中都放了一个调试消息,我发现它被无休止地调用,我的猜测是因为“应用内”语言字体更改试图将语言更改为设置,但 UIActivityViewController 以某种方式试图将字体改回或至少在检测到不正确时调用 setNeedsDisplay() ,它将调用被覆盖的方法,然后它会再次检测到它,从而创建一个循环无休止地调用 setNeedsDisplay()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2014-08-17
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    相关资源
    最近更新 更多