每当我在 iMessage 应用程序外部滑动以打开另一个 iMessage 应用程序,然后通过向后滑动返回到我的 iMessage 应用程序时,我的 iMessage 应用程序都会再次加载。
甚至 MessagesViewController
的 viewDidLoad
也会再次被调用。
我在 MessagesViewController
中的代码看起来像-
class MessagesViewController: MSMessagesAppViewController {
override func viewDidLoad() {
super.viewDidLoad()
openSuitableController()
}
override func willTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
removeAllChildViewControllers()
}
override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
openSuitableController()
}
}
在openSuitableController
中,我只是将一个childViewController
添加到MessagesViewController
。
由于应用程序再次启动,collectionView
被加载并滚动到顶部,导致闪烁。
如果您需要更多信息,请发表评论。
PS:我添加了 Objective-C
标签,因为我不认为这个问题是由于特定语言造成的。
最佳答案
我认为这是不可避免的,并且这正是 iMessage 管理其托管的 iMessage 应用程序的方式。即:当您滑出时,iMessage 框架会关闭您的应用程序,并启动您滑入的下一个应用程序。 iOS 11 及之前的版本就是如此,当然,将来可能会发生变化。
iMessage 有一种相当复杂的方式来呈现您的 UI,将其嵌入到自己的沙盒容器 View Controller 层次结构中,这是为了确保 iMessage 本身与私有(private)聊天数据和您的应用程序之间的安全信任边界。因此,与应用程序自行启动相比,呈现应用程序的开销更大,我的猜测是应用程序像这样重新启动,以最大限度地减少资源使用并保护 iMessage 免于耗尽其所需的资源。
值得让您的应用程序启动尽可能快(例如通过限制动态库加载时间),并记住您的初始内容在交换为存储的快照时的外观。
我认为,最大限度地减少应用程序启动和停止时完成的工作非常重要,以便在应用程序之间实现最平滑的转换。
当您从一个应用程序滑出到另一个应用程序时,iMessage 会生成前一个 UI 状态的快照图像,然后在滑回您的应用程序时,它会在您的应用程序进行初始化时显示该快照。
因此,仔细查看快照过程并尝试确保您的初始 UI 演示能够很好地从 iMessage 框架生成的快照过渡是值得的。
关于ios - iMessage 应用程序不断重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46784253/