iMessageApp-MessagesViewController不在视图层次结构中



我在iMessage应用程序上工作,偶然发现了这个讨厌的bug。我真的很感激社区的力量。有人设法解决了吗?

  • 问题的清晰描述:

我在一个独立的iMessage应用程序上工作。当iMessage应用程序处于活动状态但隐藏在键盘下方时,从该扩展程序点击消息会打开一个空屏幕的应用程序。对这个问题的调查使我得出结论,MessagesViewController中的视图的窗口属性没有附加UIWindow。此外,MessagesViewController不会显示在视图层次结构中,也不会调用viewDidLoad和viewDidAppear等MessagesViewController生命周期方法。

  • 重现问题的分步说明:
  1. 打开iMessage应用程序(例如Youtube(并从该应用程序向聊天发送消息
  2. 再次打开iMessage应用程序
  3. 向上滚动,使iMessage应用程序隐藏在键盘下方
  4. 向下滚动以查找您在步骤1中发送的信息
  5. 点击信息
  6. 应用程序将以空视图展开

以下是苹果iMessage示例应用程序中复制的错误https://youtube.com/shorts/3UGyZimctSg?feature=share

我也遇到了这个错误,可以在苹果的示例应用程序以及我测试过的应用商店上的每个iMessage应用程序中重现这个问题,GamePigeon除外。

问题是,当您尝试重新打开应用程序时,MSMessagesAppViewController的视图不属于任何UIWindow层次结构,但它仍然具有parent属性。所以我想出了一个变通办法:

override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
super.didTransition(to: presentationStyle)
if self.view.window == nil {
if let parent = self.parent {
self.view.frame = parent.view.bounds
parent.view.addSubview(self.view)
}
}
}

由于ViewController没有窗口,它不会像您所说的那样获得标准的生命周期事件,而是didTransition(to presentationStyle: MSMessagesAppPresentationStyle)仍然被打电话,所以这就是我放这个的地方。

最新更新