我正在使用我的应用程序上的共享按钮实现新功能。注意,activityViewController显示为空白。起初我以为我提供给共享的项目可能为null,但是当我尝试共享一个简单的字符串时,它仍然像这样显示,我重新访问了我以前的工作代码,并且它们都以这种方式工作。甚至像这样简单的事情:
let activityViewController = UIActivityViewController(activityItems: ["test"], applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
DispatchQueue.main.async {
self.present(activityViewController, animated: true, completion: nil)
}
这就是我得到的: 任何人都不知道是什么原因造成的,以及如何解决此问题?
编辑:使用实际设备进行了测试,导致问题,在我发布的APP中,反馈是它没有显示空白,它与选项一起显示,只是无法交互作用,无法单击并且无法关闭它,应用程序将只是“挂起”,然后用户将不得不终止该应用程序以重新使用它。经过测试后,我仍然不确定是什么导致了空白,我已经禁用了我的所有UIViewController扩展,(其中许多不是自动化的,无论如何都需要调用函数,因此我认为这不是问题),并且当我在当前函数的完成块中放置debugPrint时,它甚至没有被调用,因此活动视图控制器尚未完成初始化?
答案 0 :(得分:0)
好吧,终于找到了罪魁祸首,有人告诉我我应该研究UIViewController的扩展以检查我是否覆盖了某些内容,我没有,但是我确实覆盖了UILabel和UIButton的awakeFromNib和setNeedsDisplay,因为我的应用程序有多语言支持和应用程序内更改语言支持,我想“自动化” UILabel和UIButton来更改语言字体(因为某些字体看起来更好),这样我就可以避免在将监听器添加到ViewController时将侦听器附加到它们来更改语言字体。应用程序语言更改。
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()。