我在iMessage应用程序上工作,偶然发现了这个讨厌的bug。我真的很感激社区的力量。有人设法解决了吗?
- 问题的清晰描述:
我在一个独立的iMessage应用程序上工作。当iMessage应用程序处于活动状态但隐藏在键盘下方时,从该扩展程序点击消息会打开一个空屏幕的应用程序。对这个问题的调查使我得出结论,MessagesViewController中的视图的窗口属性没有附加UIWindow。此外,MessagesViewController不会显示在视图层次结构中,也不会调用viewDidLoad和viewDidAppear等MessagesViewController生命周期方法。
- 重现问题的分步说明:
- 打开iMessage应用程序(例如Youtube(并从该应用程序向聊天发送消息
- 再次打开iMessage应用程序
- 向上滚动,使iMessage应用程序隐藏在键盘下方
- 向下滚动以查找您在步骤1中发送的信息
- 点击信息
- 应用程序将以空视图展开
以下是苹果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)
仍然被打电话,所以这就是我放这个的地方。